目标C:我可以将子视图设置为firstResponder吗?

时间:2011-06-08 04:40:15

标签: objective-c ios first-responder

我有一种情况,我将另一个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交互(这不是所需的行为)。我想在这种情况下启用子视图。

3 个答案:

答案 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(但这可能会更加麻烦比引用的解决方案)。

我很想看到其他方法来允许这一点。