ios - Swift iOS - 如何让键盘在出现 SearchController 的同时出现?
问题描述
只是为了上下文,我的键盘成功出现,所以这不是问题。
我有一个 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)
}
SearchController:我已经尝试 在in和r中添加searchController.isActive = true
和,但没有任何区别searchController.searchBar.becomeFirstResponder()
DispatcQeue.main
viewWillAppear
viewDidAppea
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()
}
}
}
解决方案
当然有延迟..这个动画完成了,然后键盘出现了。
present(nav, animated: true, completion: nil)
推荐阅读
- docker - Docker Windows 容器无法解析 host.docker.internal
- facebook - 2021 年如何在 Facebook 上获得 URL 赞
- c# - JSON.NET 通过填充来覆盖字典的值
- python - 打印列表中的每个项目及其索引,先打印索引然后打印项目
- c# - C# 如何更改程序中的分组?(初学者)
- reactjs - 如何在 Cloud Firestore 中的数组内增加地图中的值?
- c# - 从 DB 读取的变量名称而不是地址(偏移量)
- python - 如何在 Python 中显示最大列宽并写入具有最大宽度的文件?
- javascript - 这个 JS 对象声明语法是什么意思?
- reactjs - 警告应在箭头函数的末尾返回一个值