UISearchBar在按下回车键时无法隐藏键盘

23

UISearchBar在按下回车键或用户点击其他位置时不会隐藏键盘。

我需要使用iOS键盘右下角的“删除”按钮来隐藏键盘并执行以下操作:

- (void)searchBarTextDidEndEditing:(UISearchBar *)aSearchBar

我该如何修复这个问题?


1
你是否将 UISearchBar 的委托设置为 self? - Saurabh Passolia
同意samfisher的观点。你提到的方法应该由搜索栏本身调用。但是它需要设置它的代理。 - onekiloparsec
5个回答

21
- (void)searchBarTextDidEndEditing:(UISearchBar *)aSearchBar {
    [aSearchBar resignFirstResponder];
}

同时你需要为UISearchBar设置代理:UISearchBarDelegate

这应该可以工作。

这里有示例代码http://developer.apple.com/library/ios/#samplecode/ToolbarSearch/Listings/ToolbarSearch_APLToolbarSearchViewController_m.html#//apple_ref/doc/uid/DTS40009461-ToolbarSearch_APLToolbarSearchViewController_m-DontLinkElementID_9

还有一个选项是我们可以使用searchBarSearchButtonClicked事件。

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];
    // You can write search code Here
}

6
当用户尝试输入时,这会导致键盘被关闭!应该改为searchBarTextDidEndEditing? searchBarSearchButtonClicked是更好的解决方案。 - JulianB
这会防止用户完全无法在搜索栏中输入。 - jkatzer
感谢JulianB的建议,searchBarSearchButtonClicked。 - Kamleshwar

12

在 .h 文件中添加 UISearchBarDelegate

同时将 SearchBar 对象的代理对象设置为 self。

你还应该添加 UISearchBarDelegate 的方法:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];
    // Do the search...
}

编辑:如果以上方法不起作用,请添加以下内容:

[self.view endEditing:YES];

3

针对swift 1.2版本,当你点击完成时键盘会自动隐藏。另外有一个取消功能,但是不建议使用,因为用户可能想要搜索另一个单词...

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        searchBar.resignFirstResponder()
    }

2
使用以下代码片段在点击返回按钮时关闭/隐藏键盘。
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{

    if([text isEqualToString:@"\n"])
    {        
        [searchBar resignFirstResponder];
        return NO;
    }
        return YES;
}

这是行不通的,因为 UISearchBar 的返回键只能是“搜索”,如果搜索文本为空,则禁用“搜索”返回键。 - emotality

0

它会工作 -

Objective-C -

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    [searchBar resignFirstResponder]; 
}

Swift -

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        searchBar.resignFirstResponder()
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接