【发布时间】:2012-07-31 00:39:57
【问题描述】:
我的问题:我有一个超级视图EditView,它基本上占据了整个应用程序框架,还有一个子视图MenuView,它只占据了底部~20%,然后是MenuView包含自己的子视图ButtonView,它实际上位于MenuView 的范围之外(类似于: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 中覆盖它,即未接收触摸的按钮的直接超级视图?还是我想错了?
如果这需要一个冗长的解释,一个好的在线资源会很有帮助 - 除了 Apple 的 UIView 文档,我没有说清楚。
谢谢!
【问题讨论】:
标签: objective-c ios uiview-hierarchy