我正在尝试重现可以在iphone上的联系人应用程序中看到的功能。我有一个UISearchBar,在单击搜索按钮时会解除键盘。然而,这会取消取消按钮,并且需要激活2次触摸。在联系人应用程序上,单击搜索按钮并解除键盘时,它不会被取消激活。
所以我要问的是如何解除键盘而不停用uiSearchBar上的取消按钮?
我试过了
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
//Some other code
//I have Tried
//Attempt 1
self.searchBar.endEditing(true)
//Attempt 2
self.searchBar.resignFirstResponder()
//Attempt 3
var textFieldInsideSearchBar = searchBar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar.endEditing(true)
}
Delegate方法会解析searchBar,因此您不必使用self.searchBar,这可能是问题之一。我通常使用你的“尝试2”中的逻辑。
你可以尝试实现这个:
func searchBarTextDidEndEditing(_ searchBar: UISearchBar)
并致电searchBar.resignFirstResponder()
。
如果它不起作用,那么尝试实现此方法并返回true:
func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool
如果您将UISearchBar与UISearchDisplatController结合使用,请在searchDisplayController上尝试此方法:
func setActive(_ visible: Bool, animated animated;: Bool)
这有点棘手。尝试,
[self.searchBar resignFirstResponder];
[(UIButton *)[self.searchBar valueForKey:@"_cancelButton"] setEnabled:YES];