【问题标题】:UITapGestureRecognizer: Modal View is overlapped by another viewUITapGestureRecognizer:模态视图被另一个视图重叠
【发布时间】:2019-01-26 00:43:09
【问题描述】:

我有一个 UIViewController,我显示为 modalPresentationStyle = .overCurrentContext

此上下文视图 (self.view) 具有 backgroundColor = .clear 和一个名为 content 的子视图。

content 是全边界宽度和半边界高度,白色背景。

我已将 UITapGestureRecognizer 添加到 self.view,但我无法告诉在点击重叠视图 (content) 时不触发点击操作。

你知道如何只在用户点击视图而不是子视图时触发动作吗?

【问题讨论】:

    标签: swift modal-dialog gesture overlap


    【解决方案1】:

    你需要符合UIGestureRecognizerDelegate,然后实现shouldReceive touch委托方法:

    extension ViewController: UIGestureRecognizerDelegate {
        func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
            if let touchView = touch.view {
                if touchView.isDescendant(of: view) {
                    return false
                }
            }
    
            return true
        }
    }
    

    所以如果触摸区域是子视图,那么点击手势将被忽略。

    【讨论】:

    • 谢谢。如果我还想在子视图中添加一些手势怎么办?
    • 对于这种情况,您能否参考此答案:stackoverflow.com/a/53990123/8447312 如果这对您没有帮助,我会尝试改进我对多个手势的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2014-12-12
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多