2010-03-08 3 views
17

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

Благодаря

+0

вы можете найти ответ здесь http://stackoverflow.com/questions/1092246/uisearchbar-clearbutton-forces-the-keyboard-to-appear – Hiren

ответ

31

См: UITextFieldDelegate Protocol Reference

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

- (void)clearSearchTextField 
{ 
    ... 
} 

- (BOOL)textFieldShouldClear:(UITextField *)textField 
{ 
    if (textField == self.searchTextField) [self clearSearchTextField]; 
    return YES; 
} 
+3

Отлично, это работает для UITextField, как насчет UISearchBar? – Dave

0

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

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

searchDisplayController:willHideSearchResultsTableView 
searchDisplayController:didHideSearchResultsTableView 

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

0

Для 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 
     } 
    } 
+0

Он вызывается, даже если я очищаю текст по обратной стороне. Но как определить общий четкий текст? – avdyushin

4

Для Swift 3:

Чтобы выполнить действие, когда кнопка "ясно" нажата на UITextField

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