Возможно ли получить доступ к методу делегата, который позволит выполнять дополнительные действия, когда кнопка «очистить» нажата на UITextField/UISearchBar?iPhone выполняет действие при нажатии кнопки очистки UITextField/UISearchBar
Благодаря
Возможно ли получить доступ к методу делегата, который позволит выполнять дополнительные действия, когда кнопка «очистить» нажата на UITextField/UISearchBar?iPhone выполняет действие при нажатии кнопки очистки UITextField/UISearchBar
Благодаря
См: UITextFieldDelegate Protocol Reference
Если вы установили контроллер представления в качестве делегата для вашего текстового поля (может быть сделано в интерфейсе строителя), вы можете использовать:
- (void)clearSearchTextField
{
...
}
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
if (textField == self.searchTextField) [self clearSearchTextField];
return YES;
}
Отлично, это работает для UITextField, как насчет UISearchBar? – Dave
Когда вы очищаете текстовое поле, произойдет несколько событий, с которыми вы будете иметь доступ либо через UISearchDisplayDelegate, либо в UISearchBarDelegate, например searchBar:textDidChange
и searchDisplayController:shouldReloadTableForSearchString
Это также приведет к таблице поиска, чтобы скрыть, так что вызовет
searchDisplayController:willHideSearchResultsTableView
searchDisplayController:didHideSearchResultsTableView
Когда таблица поиска будет скрывать, вы можете проверить, если искомый текст пуст, а затем делать все, что вам нужно сделать.
См. Мой ответ здесь: https://stackoverflow.com/a/3852509/91458 - он предназначен для поиска, но должен применяться и к тексту.
Это больше не работает –
Для 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
}
}
Он вызывается, даже если я очищаю текст по обратной стороне. Но как определить общий четкий текст? – avdyushin
Для Swift 3:
Чтобы выполнить действие, когда кнопка "ясно" нажата на UITextField
func textFieldShouldClear(_ textField: UITextField) -> Bool {
if textField == yourTextFieldName {
// do some action
}
return true
}
вы можете найти ответ здесь http://stackoverflow.com/questions/1092246/uisearchbar-clearbutton-forces-the-keyboard-to-appear – Hiren