Как убедиться, что текстовое поле SearchBar пустое - PullRequest
0 голосов
/ 04 марта 2020

У меня есть панель поиска, когда я нажимаю кнопку отмены, я установил ее так, чтобы в текстовом поле не было текста, и показ всех ячеек представления моей коллекции

Когда кнопка отмены была нажата, пока еще есть текст в TextField моя коллекция отображает отсутствие ячеек, пока я go не вернусь в строку поиска и не нажму кнопку удаления "X"

Буду признателен за помощь Спасибо

Вот код

        print(" search button pressed")

        navigationItem.titleView = searchBar
        searchBar.searchTextField.backgroundColor = .black
        searchBar.searchTextField.textColor = .white
        searchBar.placeholder = "search for a contact"

        searchBar.showsCancelButton = true
        searchBar.becomeFirstResponder()
        navigationItem.leftBarButtonItem = nil

        navigationItem.rightBarButtonItem?.tintColor = .white

    } else {

        print(" cancel button pressed")

        searchBar.searchTextField.text? = ""

        navigationItem.titleView = nil

        searchBar.showsCancelButton = false
        navigationItem.rightBarButtonItem?.isEnabled  = true
        navigationItem.rightBarButtonItem?.tintColor = .purple

        collectionView.reloadData()

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

вот как я могу проверить, правильно ли я выполнил свою реализацию. Убедитесь, что я вызываю необходимые методы делегата для UISearchBarDelegate и обрабатываю там фильтр.

extension MyViewController: UISearchBarDelegate {
    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        searchBar.showsCancelButton = true
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        self.view.endEditing(true)

        if (searchBar.text?.count)! > 0 {
            searchHandler(searchText: searchBar.text!)
        }
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        searchBar.text = ""
        searchBar.showsCancelButton = false
        self.view.endEditing(true)
        filteredValues?.removeAll() // this removes any previous array items
        filteredValues = listValues // this assigns your listValues to filteredValues
        collectionView?.reloadData() // this reloads your collectionView
    }

    func searchBar(_ searchBar: UISearchBar, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if (searchBar.text?.count)! > 0 {
            searchHandler(searchText: searchBar.text!)
        }
        return true
    }

    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {}

    func  searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        searchHandler(searchText: searchText)
    }

    fileprivate func searchHandler(searchText: String) {
      //implement your filtering here
    }
}

Опять же, есть разные способы реализовать фильтрацию поиска и назначить отфильтрованные значения источнику данных collectionView.

Надеюсь, это поможет. Спасибо

0 голосов
/ 04 марта 2020

Вы пытались присвоить nil searchBar.searchTextField.text? Может быть, это может иметь значение.

...