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