我在UISearchController
中配置了viewDidLoad()
,如下所示:
let searchController = UISearchController(searchResultsController: nil);
searchController.delegate = self;
searchController.searchResultsUpdater = self;
searchController.searchBar.delegate = self;
self.searchController.isActive = true;
self.searchController.searchBar.becomeFirstResponder();
self.navigationItem.searchController = searchController;
尽管我已将isActive
设置为{{1},并将searchBar
设置为firstResponder
,但是当视图出现在屏幕上时,UISearchController不处于活动状态。手动点击该字段可以正确打开它。
iOS 12中有没有理由isActive
中不考虑becomeFirstResponder
和viewDidLoad
属性吗?
答案 0 :(得分:1)
不确定那里发生了什么,但这是它在导航栏中的唯一之处。
这似乎可以解决问题。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.async(searchController.searchBar.becomeFirstResponder)
}
答案 1 :(得分:0)
在我的情况下,在iOS 12.x中,我只是将becomeFirstResponder()
放在viewDidAppear
中,但有一点延迟,即 0.1秒。添加这样的延迟可以保证键盘的显示。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.definesPresentationContext = true
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.searchController.searchBar.becomeFirstResponder()
}
}
我希望这会有所帮助。
编辑:如果您支持iOS 10和11,那么我过去的这个回答可能会对您有所帮助。 https://stackoverflow.com/a/53264329/3231194