可能它在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
});
}
但我相信這是應該是一個更好的解決方案
你在哪裏啓動你的搜索欄? – 2013-03-18 08:57:45
您是否嘗試將[self.searchBar becomeFirstResponder]放入viewWillAppear?它在viewDidLoad之後調用,但viewController不可見 – Mikhail 2013-03-18 08:58:04
@roronoazorro:我正在使用StoryBoard。 – 2013-03-18 10:20:47