子 UIViewController 视图阻止容器 UIViewController 视图接收触摸事件
Posted
技术标签:
【中文标题】子 UIViewController 视图阻止容器 UIViewController 视图接收触摸事件【英文标题】:Child UIViewController view prevents container UIViewController views from receiving touch events 【发布时间】:2018-09-12 11:14:36 【问题描述】:我在主 UIViewController 中有一个地图和一些按钮,在子 UIViewController 中有一个弹出视图。问题是子 UIViewController 的主视图阻止主按钮和地图接收任何触摸事件!
结构如下:
主 UIViewController 查看 地图视图 用户界面按钮 子 UIViewController 查看。 弹出 UIView 按钮编辑: 此代码通过所有事件,但我不需要停止弹出 UIView 和按钮事件
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool
print("Passing all touches to the next view (if any), in the view stack.")
return false
【问题讨论】:
***.com/questions/3834301/… @BencePattogato 当我这样做时,mapview 注释停止接收任何触摸事件 我认为,您将控制权交给了 childVC,这会阻止您的 mainVC。 你是说这个“弹出视图”覆盖了主视图上的可点击按钮吗?在我看来,这是一个 UI 问题,而不是事件问题。在这种情况下,我可以想到三个选项。 (1) 使您的“弹出”视图可移动,即使这在 ios 应用程序中通常看不到。 (2) 使您的“弹出窗口”可关闭,并让用户决定要点击什么。 (3) 使你的“弹出”静态/固定,不要在它下面隐藏东西。现在...如果您的问题是“弹出”中发生的事件没有被底层 VC 看到,请让底层 VC 成为弹出窗口的代表。 我刚刚更新了问题以澄清当前情况 【参考方案1】:根据@BencePattogato 的回答,这段代码解决了我的问题。谢谢
class UnTouchableView: UIView
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool
return subviews.contains(where:
!$0.isHidden && $0.point(inside: self.convert(point, to: $0), with: event)
)
【讨论】:
以上是关于子 UIViewController 视图阻止容器 UIViewController 视图接收触摸事件的主要内容,如果未能解决你的问题,请参考以下文章
为啥 UIView 的这些自动布局约束会阻止 UIButton 子视图接收触摸事件?