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