2011-06-08 80 views
3

我有一种情况,我从另一个viewcontroller添加一个视图到现有的viewcontroller。例如:Objective C:我可以设置子视图为firstResponder吗?

//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'设置为第一响应者?这种情况下,加载页面视图大小不覆盖现有视图的整个大小,并且用户仍然可以与超级视图交互(这不是所期望的行为)。我想在这种情况下启用子视图。

回答

2

有趣的问题。我发现了一个类似的post从苹果开发者论坛在这个问题上报价:

要真正使这个观点在屏幕上唯一 可接收触摸 你需要以添加另一种观点 过一切之上赶上 触摸的休息,或在您的层次结构某处子类 视图(或 您的UIWindow本身),并覆盖 则hitTest:withEvent:方法总是返回 文本视图时,它是可见的,或 到不在 文本视图中返回零触摸。

这似乎表明还没有一个非常简单的解决办法(除非有关于今年十月后作出的API的变化,2010年)

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

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

3

当我有类似的问题,我提出,覆盖了整个屏幕的不可见的UIView,我加在主视图的顶部的大无形的UIView并把装载查看无形的UIView的子视图。

3

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

相关问题