2011-06-14 52 views
1

我无法让我的UIButtonsUIScrollViews等,在这种情况下工作:UIResponder链所需的说明

我有基地UIViewController,这是UIWindow根控制器。 在这层之上,我添加了一些其他的UIViews,我将其称为“中间层视图”。在顶部,我为叠加对象添加了另一个UIView

定期为不同视图更改中间层视图。它使用的UIView来自一个由NIB文件制作的UIViewController。这里有一个例子

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上升到视图链,但似乎跳过了中间层视图和UIResponders完全在该UIView。它直接跳到根UIViewController

有人知道这里发生了什么吗?

难道可以通过某种方式创建两个UIEvents?一个用于叠加视图,另一个用于中间层视图?那可能吗?如果是这样,怎么样?

任何帮助将不胜感激。 谢谢, 丰富

回答

0

EDIT1开始:

,你可以把一个UITapGestureRecognizer到m_overlayView和initWithTarget:你-middleview行动:一些法合middleview现在

,在你middleview你可以将recognizer.state识别为UIGestureRecognizerStateBegan,Ended等并执行您想要执行的操作。

edit1 end:

您可以调试它。只需在所有控制器中使用touchesbegan中的日志。通过记录触摸响应的顺序将会清楚。

好的..所以这个从文档描述的方法可能会回答你。你的m_overlayViewnextController.view是彼此相关的兄弟姐妹,而不是超级查看。所以你对他们任何一个的触摸都不会被报告给其他人,而是向基地superview报告,这是两个兄弟姐妹常见的superview

因此,你会发现中间层被绕过。其实你的中间层是兄弟姐妹,不再是超级景观。希望至少给你提供一些方法;)

insertSubview:belowSubview: 

在视图层次结构中的另一个视图下插入一个视图。

(void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview 

参数

view 

视图插入下方的另一视图。如果它不是siblingSubview的兄弟,它将从superview中删除。

siblingSubview

同级视图,这将是所插入的视图上方。

讨论

此方法保留视图,并将其下一个应答器的接收器,这是它的新superview

视图只能有一个超级视图。如果视图已经有superview且该视图不是接收器,则在使接收器成为新的superview之前,此方法将删除先前的superview

+0

嗨。感谢您及时的回复。我已经在我所有的ViewController中记录了touchesBegan等。这就是我能够发现它正在跳过我的中间层。我不知道为什么:s。 – 2011-06-14 11:20:35

+0

请通过我的更新回答 – 2011-06-14 12:02:16

+0

啊是的。这就是发生的事情。有谁知道我如何解决这个问题?我可以在覆盖图下插入中间图层,然后将覆盖图的超级视图设置为中间图层? – 2011-06-14 15:08:37