如何为UITableViewCell的子View禁用UITapGesture?

问题描述 投票:0回答:1

我有一个有两个不同的自定义UITableViewCell的tableView。 在tableView中,第一个单元格始终是ResearchPostFeedTableViewCell类型,其余单元格是CommentTableViewCell类型。 第一个单元格类型包含一个子View,当点击它时,我希望它能做一些事情。 我的问题是,我在UIViewController.view中添加了一个UITapGestureRecognizer,隐藏了键盘。 结果,点击屏幕上的任何地方都只能隐藏键盘。 当用户点击第一个单元格的子视图时,我如何专门禁用这个点击手势? 我已经尝试了以下方法,但我怀疑我没有完全掌握正确的代码,无法将触摸定位在第一个单元格的subView上,以禁用UIViewController.view tapGesture。

class CommentMainViewController: UIViewController, UITextViewDelegate, UIGestureRecognizerDelegate{

    var myTableView: CommentOnPostTableView! // Custom UITableView
    var screenTapGesture: UITapGestureRecognizer!

    override func viewDidLoad() {
        super.viewDidLoad()

    ...
    screenTapGesture = UITapGestureRecognizer.init(target: self, action: #selector(hideKeyBaord))
    screenTapGesture.delegate = self
    self.view.addGestureRecognizer(screenTapGesture)
    ...


}

    func hideKeyBaord(){
        // Hides the keyboard
    }


    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {

    if gestureRecognizer == screenTapGesture{
        let researchCell = myTableView.cellForRow(at: [0,0]) // First cell only
        if let imageCarousel = researchCell?.imageView{
            let location = touch.location(in: imageCarousel)
            let isTouchImage = imageCarousel.frame.contains(location)
            if isTouchImage{
                print("IMAGE TOUCHED!")
                // Disable screenTapGesture
                return false
            }else{
                return true
            }
        }
            return true
        }else{
            return false
        }
    }
}
swift uitableview uigesturerecognizer
1个回答
2
投票

我想你的问题是,隐藏键盘的点击手势会取消其他的触摸。

简单地设置 取消点击查看 像这样把你的点击手势的属性改为false。

screenTapGesture.cancelsTouchesInView = false
© www.soinside.com 2019 - 2024. All rights reserved.