取消其他视图的触摸事件

Posted

技术标签:

【中文标题】取消其他视图的触摸事件【英文标题】:Cancel touch events for other views 【发布时间】:2019-03-08 13:14:22 【问题描述】:

我有一个UIViewsubclass,它在camera previewAR,但不是ARKit)之上显示一些内容。在这个视图中,我使用touchesBegantouchesEnded 来检测用户是否按下了显示的对象。现在我在UINavigationController 内的controller 中有这个视图embedded,并且这个NavigationController 启用了在点击时显示/隐藏栏。我想这样做,如果我检测到对ARView 内的对象的点击,那么我可以执行一些操作,但是NavigationController 不会接收到触摸,因此只有当我点击背景时,条才会隐藏。在这种情况下,如何进一步阻止发送触摸事件?

【问题讨论】:

【参考方案1】:

所以,如果我对您的理解正确,您想识别这两个事件,并调用这两个手势的方法,对吗?如果是这样,试试这个代码sn-p:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool 
    return true

此方法允许识别多种手势

【讨论】:

并不总是这样。现在它已经以这种方式工作了 - 我在我的子视图中检测到 touchesEnded 并且导航控制器上的 Bars 都隐藏了。如果我的子视图触摸位于子视图的特殊位置,我希望能够以某种方式阻止这些条隐藏。我没有实现 NavigationController 的触摸,这些是由 SDK 完成的,我只是在情节提要中选择了一些选项。总之,我希望能够将触摸限制在我的子视图中,但并非总是如此——只有在检测到触摸后我才决定这样做。另外我不使用 GestureRecognizers,只是 touchesBegan 和 touchesEnded。 实际上我认为我可以重新设计我的代码以使用手势识别器,然后这可能会起作用。谢谢。【参考方案2】:

如果您希望限制对不同视图的触摸,您可以根据您喜欢的每个条件更改userInteractionEnabled的属性。

当此属性设置为 false 时,将不会接收所选视图的触摸事件。

【讨论】:

以上是关于取消其他视图的触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

允许触摸表格单元格以取消其他当前触摸

Swift:在自定义视图中未调用 UIButton 触摸事件

仅当触摸类型为手指时,如何将触摸事件传递给其他视图?

你可以在 touchesBegan 之后强制取消触摸事件吗?

UIScrollView 事件处理

(iphone) uiscrollview 触摸。取消内容触摸并开始滚动