【发布时间】:2018-07-31 17:30:18
【问题描述】:
就上下文而言,我的键盘成功出现,所以这不是问题。
我有一个 searchButton 作为我的 rightBarButtonItem,当按下它时,它会模态地呈现一个包含 SearchController 的 vc。当 SearchController 出现时,键盘也出现了,但键盘出现的时间晚了一秒,在它出现之前有 1 秒的延迟。基本上 vc 出现在场景中,然后出现键盘,我无法在出现 SearchController 的同时出现键盘。我在 YouTube 和 Vimeo 的 iOS 应用上,当我按下他们的搜索按钮时,键盘会同时显示 SearchController,没有 1 秒的延迟。
如何让键盘在 SearchController 呈现自己的同时呈现自己?
模态显示 SearchController 的按钮:
@objc func searchButtonTapped() {
let searchVC = SearchController()
let nav = UINavigationController(rootViewController: searchVC)
present(nav, animated: true, completion: nil)
}
搜索控制器:
我已经尝试在DispatcQeue.main 和viewWillAppear 和viewDidAppear 中添加searchController.isActive = true 和searchController.searchBar.becomeFirstResponder() 并没有区别
class SearchController: UIViewController {
var searchController: UISearchController!
override func viewDidLoad() {
super.viewDidLoad()
searchController = UISearchController(searchResultsController: nil)
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.searchResultsUpdater = self
searchController.searchBar.showsCancelButton = true
searchController.searchBar.placeholder = "Search"
searchController.searchBar.returnKeyType = .search
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.sizeToFit()
searchController.searchBar.tintColor = UIColor.black
definesPresentationContext = true
navigationItem.hidesBackButton = true
navigationItem.titleView = searchController.searchBar
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
searchController.isActive = true
}
// I tried both of these searchContrller delegate methods SEPERATELY but it made no difference, there's still a 1 second delay
func presentSearchController(_ searchController: UISearchController) {
DispatchQueue.main.async {
self.searchController.searchBar.becomeFirstResponder()
}
}
func didPresentSearchController(_ searchController: UISearchController) {
DispatchQueue.main.async {
self.searchController.searchBar.becomeFirstResponder()
}
}
}
【问题讨论】:
-
您是否将
navigationItem.searchController设置为您的UISearchController?如果是这样,它将为您处理所有键盘隐藏和显示。 -
@NRitH 你是什么意思,我在什么时候设置它。我上面列出的代码与我当前使用的代码完全相同
标签: ios swift uisearchcontroller uikeyboard