避免将触摸事件传递给后面的背景视图

Posted

技术标签:

【中文标题】避免将触摸事件传递给后面的背景视图【英文标题】:Avoid Passing Touch Event to the Background View Behind 【发布时间】:2020-12-09 11:07:37 【问题描述】:

查看

StackView(垂直) 紫色(视图) 绿色(视图) 橙色(视图)

View 有一个点击手势识别器。它打印“this”加上一个随机整数。

如果我点击紫色、绿色或橙色,它仍然会打印“this”。

如何禁用对彩色框的点击?我尝试关闭框上的“启用用户交互”设置。

【问题讨论】:

【参考方案1】:

因为堆栈视图是 View 的子视图,而不是添加到顶部(如呈现的视图控制器),它会像您正在经历的那样接收触摸事件。您的视图控制器需要采用 UIGestureRecognizerDelegate 协议,然后您需要将手势的委托设置为视图控制器(很可能只需将其设置为“self”),然后实现以下功能:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool 
    //the below will return false if the touch's view is not the gesture recognizer's view
    return touch.view == gestureRecognizer.view

代码示例引用自:UITapGestureRecognizer tap on self.view but ignore subviews

【讨论】:

以上是关于避免将触摸事件传递给后面的背景视图的主要内容,如果未能解决你的问题,请参考以下文章

将触摸事件传递给父视图

将触摸事件传递给多个选项之一

将触摸事件传递给 UICollectionViewCell 内容?

将 UICollectionView 触摸事件传递给其父 UITableViewCell

将触摸事件传递给 iOS 状态栏

如何将触摸事件从一个视图传递到另一个视图