【发布时间】:2018-10-13 19:38:07
【问题描述】:
我在navigationItem.searchController 中有UISearchController,当用户从菜单中选择“搜索”时,我想让它成为焦点。
很快,当用户点击菜单中的“搜索”选项 (UITableViewCell) 时,它会获取包含 searchController 的视图控制器并调用:
guard let navigationVC = presentingViewController as? UINavigationController else { return }
guard let documentsVC = navigationVC.topViewController as? DocumentsViewController else { return }
documentsVC.searchController.searchBar.becomeFirstResponder()
然后,UISearchBar 获得焦点,键盘出现,然后立即消失,我没有有任何代码可以使它消失(如 view.endEditing())。
【问题讨论】:
-
在调用
documentsVC.searchController.searchBar.becomeFirstResponder()之前,您能否尝试将searchController的isActive属性设置为true?另外,确保在主线程上调用了documentsVC.searchController.searchBar.becomeFirstResponder()。 -
也试过了,还是不行:
documentsVC.searchController.isActive = true DispatchQueue.main.async { documentsVC.searchController.searchBar.becomeFirstResponder() } -
我注意到当我这样做时它正在工作:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { documentsVC.searchController.searchBar.becomeFirstResponder() }但我想做一些不会在特定时间领先的事情,因为现在我正在 iPhone 上运行它X 与 iOS 12,可能在其他旧版本的设备上需要更多时间。 -
我认为这意味着当您调用
documentVC.searchController.searchBar.becomeFirstResponder时 SearchController 仍未完全加载。您是否尝试过在documentsViewController的viewDidAppear内部做同样的事情?我希望这可以指出可能是什么问题。 -
它只是变得“活跃”,但没有出现键盘(当我从
viewDidAppear调用代码时)。这就是问题所在,我不知道如何检测searchBar何时准备好becomeFirstResponder。
标签: ios swift uisearchbar uisearchcontroller swift4.2