19

当在 UITextField / UISearchBar 上按下“清除”按钮时,是否可以访问允许执行其他操作的委托方法?

谢谢

4

5 回答 5

35

请参阅:UITextFieldDelegate 协议参考

如果您将视图控制器设置为文本字段的委托(可以在界面生成器中完成),您可以使用:

- (void)clearSearchTextField
{
  ...
}

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
  if (textField == self.searchTextField) [self clearSearchTextField];
  return YES;
}
于 2010-03-08T21:44:26.957 回答
7

对于斯威夫特 3:

在 UITextField 上按下“清除”按钮时执行操作

func textFieldShouldClear(_ textField: UITextField) -> Bool {
    if textField == yourTextFieldName {
        // do some action
    }
    return true
}
于 2017-09-14T22:07:41.900 回答
1

对于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
        }
    }
于 2016-03-08T20:05:44.977 回答
0

当您清除文本字段时,将发生几个事件,您可以通过UISearchDisplayDelegate或 UISearchBarDelegate 访问这些事件,例如searchBar:textDidChangesearchDisplayController:shouldReloadTableForSearchString

这也会导致搜索表隐藏,因此它会触发

searchDisplayController:willHideSearchResultsTableView  
searchDisplayController:didHideSearchResultsTableView

当搜索表将隐藏时,您可以检查搜索文本是否为空,然后执行您需要执行的任何操作。

于 2010-04-08T19:46:52.460 回答
-1
于 2013-12-18T19:01:16.763 回答