ios - UISearchController 取消按钮不可点击

标签 ios swift uisearchcontroller cancel-button

对此有很多问题/答案,但不幸的是它们都不起作用。

我有一个 UICollectionViewController 的子类,我希望它的 collectionView 项可被搜索。因此,我使用 UISearchController 但处理 self 中过滤的 collectionView 项,因此将 searchResultsController 设置为 nil。

class CollectionViewController: UICollectionViewController {

    var searchController: UISearchController!

    override func viewDidLoad() {

        super.viewDidLoad()

        self.becomeFirstResponder()

        searchController = UISearchController(searchResultsController: nil)
        searchController.delegate = self
        searchController.searchBar.delegate = self
        searchController.searchBar.isUserInteractionEnabled = true

        navigationItem.searchController = searchController

    }

}      

我实现所需的委托(delegate)方法如下:

extension CollectionViewController:: UISearchControllerDelegate {
}

extension CollectionViewController:: UISearchBarDelegate {

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        collectionView?.reloadData()
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        print("searchBarCancelButtonClicked")
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        print("searchBarSearchButtonClicked")
    }

    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        print("searchBarTextDidEndEditing")
        collectionView?.reloadData()
    }

}

我可以在搜索栏中输入文本,过滤我的 Collection View 并在输入文本时成功重新加载它。此外,我可以单击键盘上的“搜索”,这会调用 searchBarSearchButtonClicked 方法。

enter image description here

然而,虽然Cancel按钮是可见的(见上文),但它似乎不可点击。因此,searchBarCancelButtonClicked 方法不会被调用。

请问我在这里做错了什么?

最佳答案

请确保在声明委托(delegate)后调用 definesPresentationContext = true

class CollectionViewController: UICollectionViewController {

    var searchController: UISearchController!

    override func viewDidLoad() {

        super.viewDidLoad()

        self.becomeFirstResponder()

        searchController = UISearchController(searchResultsController: nil)
        searchController.delegate = self
        searchController.searchBar.delegate = self

        self.definesPresentationContext = true .  // ADD 

        searchController.searchBar.isUserInteractionEnabled = true

        navigationItem.searchController = searchController

    }

}      

关于ios - UISearchController 取消按钮不可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50108933/

相关文章:

ios - 如何摆脱按下后退按钮后立即发生的故障?

ios - Forge 查看器在加载一些大型模型后崩溃

ios - Objective-C - 无法更改 NSMutableArray 中的值

ios - 从后台 Swift 加载应用程序时如何处理 touchID

ios - Xcode 5 在带有 WebView 的新 View Controller 中加载 URL

json - 如何在 Swift 中解码具有许多唯一键的嵌套 JSON?

ios - UIButton 不响应触摸

ios - 如何使用搜索 Controller 更新我的表 Controller 过滤?

ios - 从过滤后的搜索结果中快速删除条目

ios - 关闭 UISearchController 的 searchResultsUpdater 需要按两次