在这种情况下,我无法让我的UIButtons、UIScrollViews等正常工作:
我有一个基本的UIViewController,它是UIWindow的根控制器。在这一层之上,我添加了一些其他的UIViews,我称之为“中间层视图”。在顶部,我为覆盖对象添加了另一个UIView。
对于不同的视图,中间层视图会定期更改。它使用的UIView来自UIViewController,由一个NIB文件生成。下面是一个例子
if ( mode == eModeShowView1 )
UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View1"...
else if ( mode == eModeShowView2 )
UIViewController* nextController = [[UIViewController alloc] initWithNibName:@"View2"...
[UIView insertSubview:nextController.view below:m_overlayView];现在,当我触摸屏幕时,第一个响应者显然是被触摸的OverlayView或OverlayView上的任何UIResponder。触摸输入的UIEvent沿视图链向上移动,但似乎完全跳过了中间层视图和该UIView上的UIResponders。它直接跳转到根UIViewController。
有人知道这是怎么回事吗?
可以通过创建两个UIEvents来解决这个问题吗?一个用于覆盖视图,另一个用于中间层视图?这有可能吗?如果是这样的话,是怎么做的?
任何帮助都将不胜感激。谢谢你,瑞奇
发布于 2011-06-14 19:17:23
edit1启动:
您可以将一个方法放到m_overlayView和initWithTarget中:您的中间视图操作:一些中间视图中的方法
现在,在你的中间视图中,你可以将recognizer.state标识为UIGestureRecognizerStateBegan,and等,然后做你想做的事情。
edit1结束:
您可以对其进行调试。只需在所有控制器中使用touchesbegan中的日志即可。通过记录触摸响应的顺序可以清楚地看到这一点。
好的..。因此,文档中对方法的描述可能会回答您的问题。您的m_overlayView和nextController.view将彼此视为兄弟,而不是superview。因此,您对它们中的任何一个的触摸都不会报告给另一个,而是报告给基本superview,这是两个兄弟姐妹的公共superview。
因此,您会发现中间层被绕过了。实际上,您的中间层是兄弟层,不再是superview。希望这至少能给你一些前进的路;)
insertSubview:belowSubview:在视图层次结构中的另一个视图下方插入视图。
(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview参数
view要在另一个视图下方插入的视图。如果它不是siblingSubview的兄弟,就会从它的superview中删除。
siblingSubview
将位于插入视图上方的同级视图。
讨论
此方法保留视图,并将其下一个响应者设置为接收者,即其新的superview。
视图只能有一个superview。如果查看器已经具有superview,且查看器不是接收器,则此方法在使接收器成为其新superview之前删除先前的superview。
https://stackoverflow.com/questions/6342352
复制相似问题