可能它在 viewDidLoad 中不起作用,因为视图尚未添加到视图层次结构中。但根据苹果文档 becomeFirstResponder 应该只在附加到 UIWindow 的对象上调用:
However, you should only call it on that view if it is part of a view hierarchy.
If the view’s window property holds a UIWindow object, it has been installed
in a view hierarchy; if it returns nil, the view is detached from any hierarchy.
所以,我认为,实现必要行为的最佳位置是将调用放入viewWillAppear
方法中。
更新。
因此,在 viewWillAppear 控制器的视图中尚未附加到 UIWindow ...它只会通知,该视图将被添加到视图层次结构中
这可能有些棘手,但您可以在 viewWillAppear 中做一些小的延迟:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
double delayInSeconds = 0.05;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^{
make first responder here
});
}
但我相信应该有更好的解决方案