Можно ли получить доступ к методу делегата, который позволит выполнять дополнительные действия при нажатии кнопки «очистить» на UITextField / UISearchBar?
Спасибо
Можно ли получить доступ к методу делегата, который позволит выполнять дополнительные действия при нажатии кнопки «очистить» на UITextField / UISearchBar?
Спасибо
См.: Справочник по протоколу UITextFieldDelegate
Если вы установите свой контроллер представления в качестве делегата для вашего текстового поля (это можно сделать в построителе интерфейса), вы можете использовать:
- (void)clearSearchTextField
{
...
}
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
if (textField == self.searchTextField) [self clearSearchTextField];
return YES;
}
Для Swift 3:
Чтобы выполнить действие при нажатии кнопки «очистить» на UITextField
func textFieldShouldClear(_ textField: UITextField) -> Bool {
if textField == yourTextFieldName {
// do some action
}
return true
}
Для UISearchBar
вы захотите реализовать func searchBar(searchBar: UISearchBar, textDidChange searchText: String)
.
Это срабатывает перед func searchBarTextDidBeginEditing(searchBar: UISearchBar)
, а также перед func searchBar(searchBar: UISearchBar, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool
.
Ваша реализация должна выглядеть примерно так:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
if searchText == "" {
//Code to execute when search is cleared
}
}
Когда вы очищаете текстовое поле, произойдет несколько событий, к которым у вас будет доступ через UISearchDisplayDelegate или UISearchBarDelegate, например searchBar:textDidChange
и searchDisplayController:shouldReloadTableForSearchString
Это также приведет к тому, что таблица поиска будет скрыта, поэтому она вызовет
searchDisplayController:willHideSearchResultsTableView
searchDisplayController:didHideSearchResultsTableView
Когда таблица поиска скроется, вы можете проверить, пуст ли поисковый текст, а затем сделать все, что вам нужно.
См. Мой ответ здесь: https://stackoverflow.com/a/3852509/91458 - это для searchBar, но должно применяться в textField.