【问题标题】:Child UIViewController view prevents container UIViewController views from receiving touch events子 UIViewController 视图阻止容器 UIViewController 视图接收触摸事件
【发布时间】: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

}

【问题讨论】:

  • @BencePattogato 当我这样做时,mapview 注释停止接收任何触摸事件
  • 我认为,您将控制权交给了 childVC,这会阻止您的 mainVC。
  • 你是说这个“弹出视图”覆盖了主视图上的可点击按钮吗?在我看来,这是一个 UI 问题,而不是事件问题。在这种情况下,我可以想到三个选项。 (1) 使您的“弹出”视图可移动,即使这在 iOS 应用程序中通常看不到。 (2) 使您的“弹出窗口”可关闭,并让用户决定要点击什么。 (3) 使你的“弹出”静态/固定,不要在它下面隐藏东西。现在...如果您的问题是“弹出”中发生的事件没有被底层 VC 看到,请让底层 VC 成为弹出窗口的代表。
  • 我刚刚更新了问题以澄清当前情况

标签: ios swift


【解决方案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)
        })
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多