1

在这种情况下,我无法让我UIButtons的等工作:UIScrollViews

我有 base 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];

现在,当我触摸屏幕时,第一响应者显然是被触摸的theOverlayView或 any 。触摸输入在视图链上上升,但似乎完全跳过了中间层视图等。它直接跳到根部。UIResponderOverlayViewUIEventUIRespondersUIViewUIViewController

有谁知道这里发生了什么?

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

非常感激任何的帮助。谢谢,丰富

4

1 回答 1

0

编辑1开始:

您可以将 UITapGestureRecognizer 放入 m_overlayView 和 initWithTarget:your-middleview action:some-method-in-middleview

现在,在您的中间视图中,您可以将识别器.state 识别为 UIGestureRecognizerStateBegan、Ended 等,然后做您想做的事情。

编辑1结束:

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

好的..所以文档中的方法描述可能会回答您。您m_overlayViewnextController.view彼此视为兄弟姐妹而不是superview。因此,您对其中任何一个的触摸不会报告给另一个,而是报告给兄弟姐妹superview共同的基础superview

因此,您会发现中间层被绕过了。实际上,您的中间层是兄弟姐妹,不再是超级视图。希望至少能给你一些前进的道路;)

insertSubview:belowSubview:

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

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

参数

view

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

兄弟子视图

将在插入视图上方的同级视图。

讨论

此方法保留视图并将其下一个响应者设置为接收者,即其新的superview.

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

于 2011-06-14T11:17:22.837 回答