iPhone выполняет действие при нажатии кнопки очистки UITextField / UISearchBar

Можно ли получить доступ к методу делегата, который позволит выполнять дополнительные действия при нажатии кнопки «очистить» на UITextField / UISearchBar?

Спасибо


person Dave    schedule 08.03.2010    source источник
comment
ответ можно найти здесь. http://stackoverflow.com/questions/1092246/uisearchbar-clearbutton-forces-the-keyboard-to-appear   -  person Hiren    schedule 16.05.2012


Ответы (5)


См.: Справочник по протоколу UITextFieldDelegate

Если вы установите свой контроллер представления в качестве делегата для вашего текстового поля (это можно сделать в построителе интерфейса), вы можете использовать:

- (void)clearSearchTextField
{
  ...
}

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
  if (textField == self.searchTextField) [self clearSearchTextField];
  return YES;
}
person Kevin Sylvestre    schedule 08.03.2010

Для Swift 3:

Чтобы выполнить действие при нажатии кнопки «очистить» на UITextField

func textFieldShouldClear(_ textField: UITextField) -> Bool {
    if textField == yourTextFieldName {
        // do some action
    }
    return true
}
person Rbar    schedule 14.09.2017

Для 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
        }
    }
person Barlow Tucker    schedule 08.03.2016
comment
Он вызывается, даже если я очищаю текст с помощью Backspace. Но как определить полностью открытый текст? - person avdyushin; 27.04.2016

Когда вы очищаете текстовое поле, произойдет несколько событий, к которым у вас будет доступ через UISearchDisplayDelegate или UISearchBarDelegate, например searchBar:textDidChange и searchDisplayController:shouldReloadTableForSearchString

Это также приведет к тому, что таблица поиска будет скрыта, поэтому она вызовет

searchDisplayController:willHideSearchResultsTableView  
searchDisplayController:didHideSearchResultsTableView

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

person GhostM    schedule 08.04.2010

См. Мой ответ здесь: https://stackoverflow.com/a/3852509/91458 - это для searchBar, но должно применяться в textField.

person boliva    schedule 18.12.2013