我的问题:我有一个EditView
基本上占据整个应用程序框架的超级视图,以及一个MenuView
只占用底部 ~20% 的子视图,然后MenuView
包含它自己的子视图ButtonView
,它实际上位于MenuView
' 的边界之外(像这样:)ButtonView.frame.origin.y = -100
。
(注意:EditView
有其他不属于MenuView
的视图层次结构的子视图,但可能会影响答案。)
您可能已经知道这个问题:当ButtonView
在 的范围内MenuView
(或者,更具体地说,当我的触摸在MenuView
的范围内时),ButtonView
响应触摸事件。当我的触摸超出MenuView
' 范围(但仍在ButtonView
' 范围内)时, 不会收到任何触摸事件ButtonView
。
例子:
- (E) is
EditView
,所有视图的父级 - (M) is
MenuView
, EditView 的一个子视图 - (B) 是
ButtonView
,MenuView 的子视图
图表:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
因为 (B) 在 (M) 的框架之外,所以 (B) 区域中的点击将永远不会发送到 (M) - 事实上, (M) 在这种情况下从不分析触摸,触摸被发送到层次结构中的下一个对象。
目标:我认为覆盖hitTest:withEvent:
可以解决这个问题,但我不明白如何。就我而言,应该在(我的“主”超级视图)hitTest:withEvent:
中被覆盖?EditView
还是应该在MenuView
未接收触摸的按钮的直接超级视图中覆盖它?还是我想错了?
如果这需要一个冗长的解释,一个好的在线资源会很有帮助——除了 Apple 的 UIView 文档,我没有说清楚。
谢谢!