gpt4 book ai didi

ios - 当调用 UISearchBar.becomeFirstResponder() 时,键盘出现并立即消失

转载 作者:可可西里 更新时间:2023-11-01 01:56:40 25 4
gpt4 key购买 nike

我在 navigationItem.searchController 中有 UISearchController,我想在用户从菜单中选择“搜索”时使其成为焦点。很快,当用户点击菜单 (UITableViewCell) 中的“搜索”选项时,它会获取包含 searchController 的 View Controller 并调用:

guard let navigationVC = presentingViewController as? UINavigationController else { return }
guard let documentsVC = navigationVC.topViewController as? DocumentsViewController else { return }
documentsVC.searchController.searchBar.becomeFirstResponder()

然后,UISearchBar 获得焦点,键盘出现然后立即消失,我没有任何代码可以让它消失(比如view.endEditing()).

一张 GIF 值超过 1,000 字: Keyboard is appearing and immediately disappearing when UISearchBar.becomeFirstResponder() is getting called

最佳答案

所以,经过多次尝试,我找到了一些方法让它工作,但我确信有更优雅的方法来做到这一点,所以如果有人认为他们有更好的方法,请在此处发布 我可能会使用它并将您的答案标记为正确答案。

YourViewController 中创建函数 focusOnSearchBar():

func focusOnSearchBar() {
let searchBar = searchController.searchBar
if searchBar.canBecomeFirstResponder {
DispatchQueue.main.async {
searchBar.becomeFirstResponder()
}
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.focusOnSearchBar()
}
}
}

它实际上做的是递归地使用自己并检查(每 0.1 秒)是否 searchBar.canBecomeFirstResponder这是有问题的/不优雅的事情。

然后,将此添加到 viewDidAppear():

if focusOnSearch {
searchController.isActive = true
}

不要忘记为 UISearchControllerDelegate 添加扩展到您的 ViewController(当然,设置 searchController.delegate = self)并实现 didPresentSearchController(将通过设置 searchController.isActive = true 调用):

extension YourViewController: UISearchControllerDelegate {
func didPresentSearchController(_ searchController: UISearchController) {
if focusOnSearch {
focusOnSearchBar()
}
}
}

现在您所要做的就是在 prepare(for segue:sender:) 中设置 focusOnSearch = true

*注意:如果您想在 searchBar 的同一个 viewController 中关注 OnSearchBar,刚刚设置:

 focusOnSearch = true
searchController.isActive = true

它会自动运行。

关于ios - 当调用 UISearchBar.becomeFirstResponder() 时,键盘出现并立即消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52796622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com