Ios 按下“时关闭键盘”;x";在UISearchBar

Ios 按下“时关闭键盘”;x";在UISearchBar,ios,uisearchbar,uikeyboard,resignfirstresponder,Ios,Uisearchbar,Uikeyboard,Resignfirstresponder,如果我将辞职代码放在我的If条件中,键盘不辞职,如果我对If条件进行注释,我的键盘辞职 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { if (searchText.length == 0) { [searchBar resignFirstResponder]; } } 我想在用户按下“x”按钮时退出键盘,此时UISearchBar文本为空。有什么

如果我将辞职代码放在我的If条件中,键盘不辞职,如果我对If条件进行注释,我的键盘辞职

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if (searchText.length == 0) {
        [searchBar resignFirstResponder];
    }
}

我想在用户按下“x”按钮时退出键盘,此时UISearchBar文本为空。有什么方法可以做到这一点吗?

请让第一响应者退出,但在下一个运行循环中,如下所示:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
NSRange foundRange = [searchText rangeOfString:@"x"];
if (foundRange.location != NSNotFound) {
    if (searchText.length == 0) {
        [searchBar resignFirstResponder];
        }
    }
}
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{
    if ([searchText length] == 0) 
    {
        [searchBar performSelector:@selector(resignFirstResponder)
                   withObject:nil 
                   afterDelay:0];
    }
}

已测试且有效。

针对switf 3更新:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if searchBar.text == nil || searchBar.text == ""
    {
       searchBar.perform(#selector(self.resignFirstResponder), with: nil, afterDelay: 0.1)
    }
}

添加取消按钮以查看加载和添加方法->搜索栏取消按钮单击

searchBar.showsCancelButton = true

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
  searchBar.resignFirstResponder()
}

在另一篇stackoverflow文章[1]中,你得到了答案[这里][1]:那篇文章对我来说真的不管用。这个更好,但我使用了@selector(resignFirstResponder),我不认为这是问题所指的“x”按钮。