Кнопка отмены UISearchController не активируется - PullRequest
0 голосов
/ 01 мая 2018

На это есть много вопросов / ответов, но, к сожалению, ни один из них не работает.

У меня есть подкласс UICollectionViewController, и я хочу, чтобы его элементы collectionView были доступны для поиска. Поэтому я использую UISearchController, но обрабатываю отфильтрованные collectionView элементы в self, поэтому установите searchResultsController на ноль.

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

    }

}      

Я реализую необходимые методы делегата следующим образом:

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()
    }

}

Я могу ввести текст в строку поиска, отфильтровать представление своей коллекции и успешно перезагрузить его при вводе текста. Кроме того, я могу нажать «Поиск» на клавиатуре, которая вызывает метод searchBarSearchButtonClicked.

enter image description here

Однако, хотя кнопка Cancel видна (см. Выше), она, похоже, не активируется. Таким образом, метод searchBarCancelButtonClicked не вызывается.

Что я здесь не так делаю, пожалуйста?

1 Ответ

0 голосов
/ 01 мая 2018

Обязательно позвоните 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

    }

}      
...