Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何为UITableViewCell的子视图禁用UITap手势?_Swift_Uitableview_Uigesturerecognizer - Fatal编程技术网

Swift 如何为UITableViewCell的子视图禁用UITap手势?

Swift 如何为UITableViewCell的子视图禁用UITap手势?,swift,uitableview,uigesturerecognizer,Swift,Uitableview,Uigesturerecognizer,我有一个带有两个不同自定义UITableViewCell的tableView。tableView中的第一个单元格始终为ResearchPostFeedTableViewCell类型,其余为CommentTableViewCell类型。第一个单元格类型包含一个子视图,点击该子视图时,我希望它执行某些操作。我的问题是,我在UIViewController.view中添加了一个隐藏键盘的UIAPTgestureRecognitor。因此,轻敲屏幕上的任何位置只会隐藏键盘。当用户点击第一个单元格的子视图

我有一个带有两个不同自定义UITableViewCell的tableView。tableView中的第一个单元格始终为ResearchPostFeedTableViewCell类型,其余为CommentTableViewCell类型。第一个单元格类型包含一个子视图,点击该子视图时,我希望它执行某些操作。我的问题是,我在UIViewController.view中添加了一个隐藏键盘的UIAPTgestureRecognitor。因此,轻敲屏幕上的任何位置只会隐藏键盘。当用户点击第一个单元格的子视图时,如何禁用此点击手势?我尝试了以下操作,但我怀疑我没有完全正确地找到代码,以便在第一个单元格的子视图上定位触摸,以禁用UIViewController.view Tap手势

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
        }
    }
}

我认为你的问题在于,隐藏键盘的轻触手势会取消其他触摸

只需将点击手势的属性设置为false,如下所示:

screenTapGesture.cancelsTouchesInView = false

我认为你的问题在于,隐藏键盘的轻触手势会取消其他触摸

只需将点击手势的属性设置为false,如下所示:

screenTapGesture.cancelsTouchesInView = false

超优雅的一行解决方案。非常感谢。超优雅的一行解决方案。非常感谢。