【发布时间】:2009-11-10 14:30:15
【问题描述】:
我正在尝试让一个子视图成为 firstResponder。我的理解是,这是在其 viewDidAppear 方法中完成的,如下所示:
- (void)viewDidAppear {
[self becomeFirstResponder];
}
同时覆盖 canBecomeFirstResponder 以返回 YES:
- (BOOL)canBecomeFirstResponder {
return YES;
}
但是,当我在其父视图的 viewDidLoad 方法中插入子视图时:
- (void)viewDidLoad {
subViewController = [[SubViewController alloc] init];
[self.view insertSubview: subViewController.view atIndex: 0];
[subViewController viewDidAppear: NO];
[super viewDidLoad];
}
(我手动调用viewDidAppear,因为它不会自动触发),子视图不会成为firstResponder。
为什么子视图没有成为firstResponder?我怎样才能使它成为firstResponder?
谢谢,
姆博塔
顺便说一句,这是对我原来问题的重写:
我正在尝试构建一个 iphone 应用程序,其中 rootviewcontroller 对象管理两个子视图,其中一个应该对用户摇晃他的 iphone 做出反应。
经过一番挖掘,我得出结论,必须在其视图控制器的 viewDidAppear 方法中将子视图设为 firstResponder。另外,canBecomeFirstResponder方法应该修改为返回YES。
这就是发生的事情:我在应用程序委托中实例化了 rootviewcontroller。在它的 viewDidLoad 方法中,我告诉它 addSubView firstViewController。所有这些都非常漂亮。
然而,firstViewController 不会对任何晃动做出反应。我撒了一些 NSLogs,发现虽然我们确实告诉 canBecomeFirstResponder 中的 firstViewController 返回 YES,而我们确实告诉 viewDidAppear 中的 [self becomeFirstResponder],但实际上,它不是 firstResponder。
所以,我的问题是: 1)子视图实际上是否需要成为 firstResponder 才能对晃动做出反应? a) 如果不是,如何让子视图在没有成为 firstResponder 的情况下做出反应? 2) 如何创建一个子视图 firstResponder?
有趣的是,如果我在一个不同的项目中只使用一个视图控制器执行相同的序列(canBecomeFirstResponder、[self firstResponder]、motionBegan:),那么一切都会完美无缺。显然,我一定遇到了我自己制造的设计缺陷。
谢谢,
姆博塔
【问题讨论】:
标签: iphone cocoa-touch uikit