【问题标题】:iOS: Adding UITapGestureRecognizer to container view intercepts UICollectionView's didSelectItemAtIndexPath methodiOS:向容器视图添加 UITapGestureRecognizer 会拦截 UICollectionView 的 didSelectItemAtIndexPath 方法
【发布时间】:2014-12-27 03:17:18
【问题描述】:

我在 ViewController 的主 Content View 中添加了一个 UITapGestureRecognizer,以便在点击内容视图时关闭我的键盘。

问题是我的内容视图中有一个UICollectionView,设置UITapGestureRecognizer 会拦截我的UICollectionView 的点击。

如何让我的UICollectionView 的点击通过,以便didSelectItemAtIndexPath 方法再次触发?

func setupGestureRecognizer() {
    let dismissKeyboardTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
    contentView.addGestureRecognizer(dismissKeyboardTap)
}

func dismissKeyboard() {
    contentView.endEditing(true)
}

【问题讨论】:

    标签: ios swift uicollectionview uitapgesturerecognizer


    【解决方案1】:

    解决此问题的方法是将 .cancelsTouchesInView = false 添加到您的 UITapGestureRecognizer

    这允许其他视图内的触摸通过,例如 UITableViewCell 触摸。

    func setupGestureRecognizer() {
        let dismissKeyboardTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
        dismissKeyboardTap.cancelsTouchesInView = false
        contentView.addGestureRecognizer(dismissKeyboardTap)
    }
    
    func dismissKeyboard() {
        contentView.endEditing(true)
    }
    

    【讨论】:

    • 嗯,这在 Swift 4.2 iOS 12 上对我不起作用 :(
    【解决方案2】:

    试试这个

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        [self.view endEditing:YES];
    }  
    

    并删除您的 tapGesture。

    【讨论】:

    • 这会停止拦截UICollectionView,但不会在点击屏幕上的任何位置时关闭键盘。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2018-04-16
    • 2015-03-11
    • 1970-01-01
    相关资源
    最近更新 更多