需要UIResponder链说明

| 在这种情况下,我的
UIButtons
UIScrollViews
等无法正常工作: 我有基础
UIViewController
,它是
UIWindow
的根控制器。 在该层的上方,我添加了一些其他的
UIViews
,我将其称为“中间层视图”。在顶部,我为叠加对象添加了另一个“ 5”。 中间层视图会定期更改为不同的视图。它使用的ѭ5是来自NIB文件的ѭ2。这是一个例子
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
在视图链上沿,但似乎完全跳过了中间层视图和that5上的
UIResponders
。它直接跳到根2。 有人知道这是怎么回事吗? 可以通过创建两个
UIEvents
解决吗?一个用于叠加视图,另一个用于中间层视图?那可能吗?如果是这样,怎么办? 非常感激任何的帮助。 谢谢, 丰富     
已邀请:
        edit1开始: 您可以将UITapGestureRecognizer放在m_overlayView和initWithTarget:您的中间视图操作:中间方法中的某些方法 现在,在中间视图中,您可以将识别器状态标识为UIGestureRecognizerStateBegan,Ended等,然后执行您想做的事情。 edit1结束: 您可以调试它。只需在所有控制器中使用ѭ17中的日志即可。通过记录触摸响应的顺序将很清楚。 好的..所以文档中的方法描述可能会回答您。您的
m_overlayView
nextController.view
相互视为同级兄弟,而不是超级英雄。因此,您对任何一个的触摸不会被报告给另一个,而是报告给基础
superview
,这对两个兄弟姐妹都是相同的
superview
。 因此,您会发现中间层已被绕过。实际上,您的中间层是同级,而不是超级视图。希望至少能给您前进的道路;)
insertSubview:belowSubview:
在视图层次结构中的另一个视图下方插入一个视图。
(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview
参数:
view
该视图将插入另一个视图下方。如果不是siblingSubview的兄弟姐妹,则将其从ѭ20中删除。 同级子视图: 在插入视图上方的兄弟视图。 讨论: 此方法保留视图并将其下一个响应者设置为接收者,即其新的“ 20”。 视图只能有一个超级视图。如果视图已经有一个
superview
并且该视图不是接收者,则此方法在使接收者成为其新的
superview
之前先删除之前的
superview
。     

要回复问题请先登录注册