以编程方式显示导航栏的 UISearchController
Programmatically Show Navigation Bar's UISearchController
我在viewDidLoad()
中配置了一个UISearchController
如下:
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
并将 searchBar
设置为 firstResponder
,但当视图出现在屏幕上时,UISearchController 未激活。手动点击该字段可以正确打开它。
在 iOS 12 中是否存在 viewDidLoad
中不遵守 isActive
和 becomeFirstResponder
属性的原因?
不确定那里发生了什么,但它在导航栏中是独一无二的。
不过这似乎可以解决问题。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.async(searchController.searchBar.becomeFirstResponder)
}
在我的例子中,在 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,我过去的回答可能会对您有所帮助。
我在viewDidLoad()
中配置了一个UISearchController
如下:
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
并将 searchBar
设置为 firstResponder
,但当视图出现在屏幕上时,UISearchController 未激活。手动点击该字段可以正确打开它。
在 iOS 12 中是否存在 viewDidLoad
中不遵守 isActive
和 becomeFirstResponder
属性的原因?
不确定那里发生了什么,但它在导航栏中是独一无二的。
不过这似乎可以解决问题。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.async(searchController.searchBar.becomeFirstResponder)
}
在我的例子中,在 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,我过去的回答可能会对您有所帮助。