Как выйти из поиска, нажав кнопку "Отмена"?
У меня есть панель поиска с кнопкой отмены. Но когда я нажимаю кнопку "Отмена", она не закрывает панель поиска. Как я могу сделать это, нажав кнопку "Отмена", он вернет строку поиска в первое состояние?
Если у вас есть вопросы - спросите меня, пожалуйста,
Ответы
Ответ 1
Вам нужно реализовать UISearchBarDelegate:
class ViewController: UIViewController, UISearchBarDelegate {
@IBOutlet weak var searchBar: UISearchBar!
Установите делегат панели поиска в self
override func viewDidLoad() {
super.viewDidLoad()
searchBar.showsCancelButton = true
searchBar.delegate = self
а затем выполните функцию делегата butCancelSearchAction, чтобы сделать все, что вам нужно, чтобы отменить действие поиска и reset текст поиска:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
// Do some search stuff
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
// Stop doing the search stuff
// and clear the text in the search bar
searchBar.text = ""
// Hide the cancel button
searchBar.showsCancelButton = false
// You could also change the position, frame etc of the searchBar
}
Ответ 2
class MyController: UIViewController, UISearchBarDelegate {
// Called when search bar obtains focus. I.e., user taps
// on the search bar to enter text.
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
searchBar.showsCancelButton = true
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchBar.text = nil
searchBar.showsCancelButton = false
// Remove focus from the search bar.
searchBar.endEditing(true)
// Perform any necessary work. E.g., repopulating a table view
// if the search bar performs filtering.
}
}
Ответ 3
Попробуйте. Он отлично работает.
class MyViewController: UIViewController, UISearchBarDelegate {
func searchBarTextDidBeginEditing(_searchBar: UISearchBar) {
searchBar.setShowsCancelButton(true, animated: true)
//write other necessary statements
}
func searchBarCancelButtonClicked(_searchBar: UISearchBar) {
searchBar.text = nil
searchBar.setShowsCancelButton(false, animated: true)
// Remove focus from the search bar.
searchBar.endEditing(true)
}
}
Ответ 4
Вам нужно реализовать UISearchBarDelegate.
Протокол UISearchBarDelegate
определяет дополнительные методы, которые вы реализуете для создания функционального элемента управления UISearchBar
. Объект UISearchBar
предоставляет пользовательский интерфейс для поля поиска на панели, но его ответственность за выполнение действий при нажатии кнопок выполняется. Как минимум, delegate
необходимо выполнить фактический поиск, когда текст введен в textField
. Прочтите это
В Objective C
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
[self.searchDisplayController setActive:NO animated:YES];
}
В Swift:
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
self.searchDisplayController.setActive(false, animated: true)
}
Ответ 5
Swift 3
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
searchBar.showsCancelButton = true
return true
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
self.searchBar.endEditing(true)
searchBar.resignFirstResponder()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
self.searchBar.endEditing(true)
searchBar.showsCancelButton = false
searchBar.resignFirstResponder()
}
The Cancel button appears only when the user start entering characters in the field.
Ответ 6
Когда вы нажимаете кнопку отмены, searchBar
видит, что у вас есть новая вещь для поиска, поэтому, если вы нажмете resignFirstResponder()
на cancelButton
, она не будет работать, потому что после этого он вызовет didBeginText
.
Итак, я помещаю условие в didBeginText
, поэтому, когда строка в поиске имеет меньше или 0 символов, он уйдет в отставку первого ответчика. Точно так же:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.characters.count < 1 {
searchBar.resignFirstResponder()
}
}
Это легкий подход и работает.
С наилучшими пожеланиями!
Ответ 7
Попробуйте следующее:
searchController.active = false
Ответ 8
Я также столкнулся с этой проблемой, в моем случае после поиска любого элемента из представления таблицы, чем щелчок одного из элементов результата, он открыл подробный вид, но панель поиска не исчезла. Я использую Nicat answer с небольшими изменениями, вот моя версия:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
searchController.isActive = false
self.searchBarCancelButtonClicked(searchController.searchBar)
...
}