我可以挂钩到UISearchBar的Clear Button吗?

Jas*_*ien 37 iphone objective-c uikit uisearchbar

我的界面中有一个UISearchBar,我想自定义输入一些文本后出现在搜索栏中的小清除按钮的行为(它是一个带有十字的小灰色圆圈,出现在右边搜索领域的一面).

基本上,我希望它不仅清除搜索栏的文本(这是默认的实现),而且还要清除我界面中的其他东西,但是调用我自己的方法之一.

我在UISearchBar类或UISearchBarDelegate协议的文档中找不到任何内容 - 看起来您不能直接访问此行为.

我注意到的一件事是文档解释了委托方法:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
Run Code Online (Sandbox Code Playgroud)

点击清除按钮后调用.

我最初在该方法中编写了一些代码来检查搜索栏的文本属性,如果它是空的,那么它已被清除并执行我所有其他的东西.

这有两个问题:

首先,由于某些原因我无法理解,即使我在我的方法结束时告诉搜索栏resignFirstResponder,某些东西,某处正在将其设置回到firstFirstResponder.真烦人......

其次,如果用户没有使用清除按钮,并且只是使用键盘上的删除按钮删除栏中的文本,则此方法将被触发,其搜索结果将消失.不好.

任何正确方向的建议或指示都会很棒!

谢谢!

Waq*_*ikh 17

为这个问题找到了更好的解决方案:)

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    if ([searchText length] == 0) {
        [self performSelector:@selector(hideKeyboardWithSearchBar:) withObject:searchBar afterDelay:0];
    }
}

- (void)hideKeyboardWithSearchBar:(UISearchBar *)searchBar{   
    [searchBar resignFirstResponder];   
}
Run Code Online (Sandbox Code Playgroud)


bol*_*iva 12

接受的答案是不正确的.这可以做到,我只想出来并将其发布在另一个问题中:

UISearchbar clearButton强制键盘出现

最好


Ren*_*ers 7

我在我的应用程序中有这个代码.区别在于我不支持"实时搜索",而是在用户触摸键盘上的搜索按钮时开始搜索:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    if ([searchBar.text isEqualToString:@""]) {
        //Clear stuff here
    }
}
Run Code Online (Sandbox Code Playgroud)


erg*_*cak 7

Swift版本处理关闭键盘清除按钮单击:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    if searchText.characters.count == 0 {
        performSelector("hideKeyboardWithSearchBar:", withObject:searchBar, afterDelay:0)
    }
}

func hideKeyboardWithSearchBar(bar:UISearchBar) {
    bar.resignFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)