我正在使用搜索控制器,以便在iOS应用中实现搜索部分。我正在使用iOS 11和xCode 10。
我的场景是一个表视图控制器。我以编程方式包含了一个搜索栏,其中包含以下代码:
override func viewDidLoad() {
super.viewDidLoad()
let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.delegate = self
definesPresentationContext = true
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
}
我还包括一个UISearchBar委托扩展:
extension SearchTableViewController: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
tableView.reloadData()
episodeResultsArray = []
let searchTerm = searchBar.text!
let escapedSearchTerm = searchTerm.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!
performSearch(forTerm: escapedSearchTerm)
}
}
performSearch函数通过AlamoFire连接到数据库,并返回结果,然后在表视图中列出。
当我运行该应用程序时,该表显示为空(应最初显示为空)。当我单击搜索栏时,它进入编辑状态(导航栏折叠,搜索栏停留在顶部,出现“取消”按钮,并且半透明的灰色框覆盖了屏幕的其余部分。
当我搜索某些内容时,结果成功列在表中。但是,即使结果可见,我仍然处于搜索栏的编辑状态。我需要单击半透明框以退出编辑状态,然后才可以滚动浏览结果。
点击搜索后如何退出编辑状态,以便在获得结果后能够在表格中滚动浏览?
我尝试使用searchBar.resignFirstResponder(),但这只会关闭键盘。我也尝试过
searchBar.endEditing(true)
但是即使搜索栏失去焦点,我仍处于编辑状态。
请澄清一下,我需要它可以从头开始搜索,而不是作为过滤器,这意味着我输入的不仅仅是显示结果的子集。
答案 0 :(得分:0)
找到了答案。解决方法是添加
searchController.isActive = false