2010-03-08 65 views

回答

31

参见:UITextFieldDelegate Protocol Reference

如果您将视图控制器作为委托为您的文本字段(可在Interface Builder来完成),您可以使用:

- (void)clearSearchTextField 
{ 
    ... 
} 

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

伟大的,这适用于UITextField,那么UISearchBar如何? – Dave 2010-03-09 00:22:41

0

当您清除文本字段将会发生几个事件,您将通过UISearchDisplayDelegate或UISearchBarDelegate访问这些事件,例如searchBar:textDidChangesearchDisplayController: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 2016-04-27 10:46:59

4

对于斯威夫特3:

要当按下一个的UITextField

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