我了解你正在寻找的期望行为Joey - 我还没有在API中找到支持这种自动消息传递的兄弟姐妹视图的链式行为。
我最初在下面写的是关于只通知父母UIView关于触摸。这仍然适用,但我相信你需要更进一步,并让父UIView使用命中测试技术,塞尔吉奥在它的每个子视图上描述覆盖层的兄弟,并让父UIView手动调用“do它的每个子视图都通过了命中测试。这些同级视图中的每一个都可以返回布尔值,以确定是否要中止通知其他同级或继续链。
如果你发现自己使用这种模式很多,可以考虑在UIView上添加一个类别方法,它封装了命中测试并要求视图执行一个选择器。
我原来的答复
手工工作的一点点,就可以连接到一起这个自己。我必须这样做,并且它对我很有用,因为我有一个经常重复的用例(一个按钮上的覆盖视图),创建一些自定义类是有意义的。如果你的情况相似,其中一种技术就足够了。
选项1: 如果覆盖不需要做任何事情,但看起来很漂亮,有它退出触摸与userInteractionEnabled = NO
完全处理的。这将使触摸事件转到它的父UIView(它是覆盖层)。
选项2: 有覆盖吸收触摸事件(因为它会默认设置),然后调用上的指示触摸或特定手势被认定父UIView的一个方法,这里是它是什么。这样,叠加层后面的UIView仍然会对触摸识别起作用,即使其他人进行了拦截。
使用选项2,它更适合于简单的UIControlEvent
类型,如UIControlEventTouchDown
和UIControlEventTouchUpInside
。在我的情况下(一个定制的UIButton
子类,在它上面有一个自定义的覆盖视图),我会触摸并触摸按钮上的事件为两个单独的方法。如果在按钮本身发生触摸或触发内部事件,则会触发这些事件。但是,如果我需要模拟发生按钮按下,它们也是我可以从覆盖视图调用的钩子。
根据您的需求,你可以有覆盖层之间的已知协议和它的父UIView的或只是有覆盖非正式测试的UIView,具有respondsToSelector:
检查就可以调用performSelector:
与要叫那会自定义方法之前如果UIView没有覆盖,它会自动触发。