3

我有一种情况,我将另一个视图控制器的视图添加到现有的视图控制器。例如:

//set up loading page
self.myLoadingPage = [[LoadingPageViewController alloc]init ];
self.myLoadingPage.view.frame = self.view.bounds;
self.myLoadingPage.view.hidden = YES;

[self.view addSubview:self.myLoadingPage.view];

是否可以将“self.myLoadingPage”设置为第一响应者?在这种情况下,loadingpage 视图大小不会覆盖现有视图的整个大小,并且用户仍然可以与超级视图交互(这不是所需的行为)。在这种情况下,我只想启用子视图。

4

3 回答 3

3

当我遇到类似问题时,我制作了一个覆盖整个屏幕的不可见 UIView,我在主视图顶部添加了大的不可见 UIView,并使加载视图成为不可见 UIView 的子视图。

于 2011-06-08T06:52:42.900 回答
3

最简单的解决方案是在加载视图中覆盖 hitTest 方法以返回 TRUE。这个顶部视图是响应者链中的第一个,调用 hitTest 方法,如果该点在视图内并因此将被处理,则该方法通常返回 TRUE,无论您获得触摸事件并有效阻止消息被重新发送到下一个响应者。

于 2011-06-08T08:50:34.267 回答
2

有趣的问题。我发现了一个类似的帖子,其中引用了 Apple 开发者论坛关于这个问题的一段话:

要真正使此视图成为屏幕上唯一可以接收触摸的内容,您需要在其他所有内容之上添加另一个视图以捕捉其余的触摸,或者子类化层次结构中某处的视图(或您的 UIWindow 本身)并覆盖 hitTest:withEvent: 以始终在可见时返回您的文本视图,或者为不在文本视图中的触摸返回 nil。

这似乎表明没有一个非常简单的解决方案(除非在 2010 年 10 月之后对此进行了 API 更改。)

或者,我想你可以通过你的所有其他subviewssuperview单独将它们的userInteractionEnabled属性设置为NO(但这可能会比引用的解决方案更麻烦)。

我很想看到其他方法来实现这一点。

于 2011-06-08T06:47:24.547 回答