使用搜索控制器执行搜索后退出编辑状态

时间:2018-10-24 21:57:59

标签: ios swift uisearchbar uisearchcontroller

我正在使用搜索控制器,以便在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)

但是即使搜索栏失去焦点,我仍处于编辑状态。

请澄清一下,我需要它可以从头开始搜索,而不是作为过滤器,这意味着我输入的不仅仅是显示结果的子集。

1 个答案:

答案 0 :(得分:0)

找到了答案。解决方法是添加

searchController.isActive = false