Метод делегата searchBarCancelButtonClicked не вызывается. Есть ли способ позвонить?
UIViewController для реализации представления для размещения UITableView UISearchBar и реализации. Но вы не можете вызвать searchBarCancelButtonClicked. Не знаю в чем причина.
7 ответов
Причина, по которой searchBarCancelButtonClicked не запускается, может заключаться в том, что ваш UISearchBar не показывает кнопку Отмена. Вы можете отобразить кнопку Отмена следующим образом:
searchBar.showsCancelButton = true
У меня была та же проблема, и показ кнопки "Отмена" вызвал срабатывание searchBarCancelButtonClicked, как и ожидалось.
Убедитесь, что ваш UIViewController установлен в качестве делегата вашего UISearchBar и что он принимает протокол UISearchBarDelegate.
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
// This method has been called when u enter some text on search or Cancel the search.
// so make some condition for example:
if([searchText isEqualToString:@""] || searchText==nil) {
// Nothing to search, empty result.
searching = NO;
[mytableView reloadData];
}
}
Надеюсь, поможет.
searchController.searchBar.delegate = self
, не просто searchController.delegate = self
Реальная причина для меня заключалась в том, что я думал, что маленькая кнопка х была означенной кнопкой отмены, но это не так... если у вас возникла та же проблема, с которой я столкнулся, используйте приведенный ниже код
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
searchRecords.removeAll()
searchTableView.reloadData()
}
}
Swift 4.2
У меня была та же проблема, и я должен был установить для свойства definePresentationContext значение true, прежде чем метод searchBarCancelButtonClicked будет работать.
definesPresentationContext = true
Попробуйте поместить это в viewDidLoad. В моем случае иногда срабатывает кнопка "Отменить действие" делегата "searchBarCancelButtonClicked", а иногда - нет (просто клавиатура отклонена и кнопка "Отмена" становится неактивной), после добавления этого все стало работать как положено.
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).isEnabled = true
Эта строка удаляет прозрачное представление UISearchController
let searchController = UISearchController(searchResultsController: nil)
searchController.dimsBackgroundDuringPresentation = false
Я столкнулся с той же проблемой, когда у меня был UISearchBar внутри UIScrollView. Как я понимаю, вопрос у вас был внутри UITableView, который является подклассом UIScrollView.
Что помогло в моём случае, так это настройка
tableView.delaysContentTouches = NO;
Кажется searchBarCancelButtonClicked
метод не работает с этим набором YES
, который является настройкой по умолчанию.