2010-03-08 70 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 
} 
相關問題