2014-10-26 150 views
0

我有一个自定义UIView可以被简化的向下:嵌套UIViews不接收触摸事件

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

对于:

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) 
    } 
} 

第一(根)节点在视图控制器创建根节点,一切按预期工作。但是,对于根节点的孩子来说,没有任何工作。

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

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

+0

可能是一个长镜头,但尝试设置最小和触摸的最大#。 – Oxcug 2014-10-26 21:18:14

+0

@theMonster现在尝试,但没有成功。问题是,即使原始输入处理函数touchesBegan没有触发,所以我很确定UITapGestureRecognizer没有错。 – Shimmen 2014-10-26 21:35:21

回答

0

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

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

+0

这并不能解决我的问题。首先,它对我来说似乎没有任何作用,但我也不想将消息发回给根。每个孩子都应该能够产生自己的孩子节点,而不与任何其他节点交互。或者我误解了一些东西? – Shimmen 2014-10-26 21:56:34