我想获得一个子视图成为firstResponder。我的理解是,这是在viewDidAppear方法中完成,像这样:但是如何做一个子视图firstResponder
- (BOOL)canBecomeFirstResponder {
return YES;
}
,当我插入子视图在其父视图的viewDidLoad方法:
同时超控canBecomeFirstResponder返回YES:
- (void)viewDidLoad {
subViewController = [[SubViewController alloc] init];
[self.view insertSubview: subViewController.view atIndex: 0];
[subViewController viewDidAppear: NO];
[super viewDidLoad];
}
(ⅰ调用视图手动打开,因为它不会自动触发),子视图不会成为firstResponder。
为什么subview不会成为firstResponder?我怎么能让它firstResponder?
感谢,
mbotta
顺便说一句,这是我原来的问题的改写:
我想建立其中RootViewController的对象管理两个子视图,一个iPhone应用程序其中之一应该对用户摇晃他的iphone做出反应。
经过一番挖掘,我总结出子视图必须在其视图控制器的viewDidAppear方法中作出firstResponder。此外,canBecomeFirstResponder方法应修改为返回YES。
所以这里发生了什么:我实例化应用程序委托中的rootviewcontroller。在它的viewDidLoad方法中,我告诉它addSubView firstViewController。所有这些都很好用。
但是,firstViewController不会对任何抖动做出反应。我洒了一些NSLogs,发现虽然我们告诉firstBeanController在canBecomeFirstResponder中返回YES,而我们告诉它在viewDidAppear中[self becomeFirstResponder],实际上,它是而不是 firstResponder。
所以,我的问题是: 1)做一个子视图实际上需要firstResponder才能对抖动做出反应? a)如果没有,如何让一个子视图没有被firstResponder反应? 2)如何做一个subview firstResponder?
是什么让这个有趣的是,如果我执行相同的序列(canBecomeFirstResponder,[self firstResponder],motionBegan :)在一个不同的项目中只有一个视图控制器,它完美地工作。很明显,我必须遇到我自己制造的设计缺陷。
感谢,
mbotta
谢谢!我会看看我可以在我的项目中做到这一点。同时,我会重新编辑我的问题,以澄清我能够得到这个事件,如果firstViewController是唯一的视图控制器。 – mbotta 2009-11-10 14:55:33