我有一种情况,我将另一个viewcontroller的视图添加到现有的viewcontroller。例如:
//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视图大小不会覆盖现有视图的整个大小,并且用户仍然可以与superview交互(这不是所需的行为)。我想在这种情况下启用子视图。
答案 0 :(得分:3)
当我遇到类似问题时,我制作了一个覆盖整个屏幕的隐形UIView,我在主视图顶部添加了大型隐形UIView,并使加载视图成为隐形UIView的子视图。
答案 1 :(得分:3)
最简单的解决方案是在加载视图中覆盖hitTest方法以返回TRUE。这个顶视图首先在响应者链中,调用hitTest方法,如果该点在视图中并且因此将被处理,则NORMALLY返回TRUE,无论是否获得触摸事件并且有效地阻止重新发送到消息的消息,返回TRUE。下一个响应者。
答案 2 :(得分:2)
有趣的问题。我发现了一个类似的post,引用了Apple Developer Forums在这个问题上的引用:
真正让这个观点成为唯一的观点 在屏幕上可以接收触摸 你需要添加另一个视图 赶上其他一切 其余的触摸,或子类a 查看层次结构中的某个位置(或 你的UIWindow本身)和覆盖 hitTest:withEvent:总是返回 文本视图可见时,或 为了不在你的接触中返回零 文本视图。
这似乎表明没有一个非常简单的解决方案(除非在2010年10月之后对此进行了API更改。)
或者,我想您可以浏览subviews
中的所有其他superview
,并单独将userInteractionEnabled
属性设置为NO
(但这可能会更加麻烦比引用的解决方案)。
我很想看到其他方法来允许这一点。