【问题标题】:Nested UIViews do not receive touch events嵌套的 UIViews 不接收触摸事件
【发布时间】:2014-10-26 21:08:23
【问题描述】:

我有一个自定义的UIView,可以简化为:

class Node: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)

        let tapGR = UITapGestureRecognizer(target: self, action: "createChildNode")
        addGestureRecognizer(tapGR)
        userInteractionsEnabled = true
    }

    /* ... */

    func createChildNode() {
        let childNode = Node(frame: self.bounds.offset(dx: 100, dy: 100))
        self.addSubview(childNode)
    }
}

第一个(根)节点在视图控制器中创建:

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.addSubview(Node(x: 100, y: 100, width: 150, height: 40))
}

对于根节点,一切都按预期工作。但是,对于根节点的子节点,没有任何作用。

为了确保我没有错误地使用 UITapGestureRecognizer,我尝试覆盖 Node 类的原始 touchesBegan 函数并执行简单的 println("tapped")。但是问题仍然存在,似乎子视图根本没有收到任何触摸。

这可能是什么原因造成的?

【问题讨论】:

  • 可能有点远,但请尝试设置最小和最大触摸次数。
  • @theMonster 现在尝试了,但没有成功。问题是,甚至原始输入处理函数 touchesBegan 都没有触发,所以我很确定 UITapGestureRecognizer 没有任何问题。

标签: ios uiview swift ios8


【解决方案1】:

听起来您只需要通过视图层次结构传递触摸事件。这个答案应该会有所帮助:

https://stackoverflow.com/a/21436355/3259329

【讨论】:

  • 这并不能解决我的问题。首先,它似乎对我根本不起作用,但我也不想将消息发送回根。每个孩子都应该能够在不与任何其他节点交互的情况下生成自己的子节点。还是我误会了什么?
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 2015-11-07
  • 2010-11-24
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多