iphone - 点击 X 按钮时从 UISearchBar 中关闭键盘

标签 iphone uitextfield uisearchbar

我正在使用 UISearchBar(但不是通常结合使用的 SearchDisplayController),并且我想在您点击“X”按钮时关闭键盘。

我关注了TomSwift's suggestion当点击“X”时被调用,效果很好。但是,从文本字段中退出第一响应者并在 UISearchBar 实例中调用(两者都使用 resignFirstResponder)不会使键盘消失。

当用户点击 X 按钮时,有没有办法摆脱键盘?

这是我为获取“清除”通知所做的操作:

- (void)viewDidLoad:
{
    for (UIView* v in searchBar.subviews)
    {
        if ( [v isKindOfClass: [UITextField class]] )
        {
            UITextField *tf = (UITextField *)v;
            tf.delegate = self;
            break;
        }
    }    
}

然后我有我的类设置来实现 UISearchBarDelegate 和 UITextFieldDelegate。

让该类充当文本字段委托(delegate)可以让我接到此电话:

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
     [textField resignFirstResponder];
     [self.searchBar resignFirstResponder];
     return YES;
}

我已经尝试了所有我能想到的方法。我尝试的最后一件事是找到一种方法来发出 UISearchDelegate 将在我的 Controller 类上调用的“searchBarCancelButtonClicked”,但我不确定如何执行此操作,因为 UISearchBar 似乎没有任何直接方法使用此名称调用。

最佳答案

汤姆的回答让我思考。如果用户点击清除按钮时搜索栏还不是firstResponder,我们可以等待它成为firstResponder,然后让它退出FirstResponder;即沿着以下路线:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
  [self performFilteringBySearchText: searchText]; // or whatever

  // The user clicked the [X] button or otherwise cleared the text.
  if([searchText length] == 0) {
    [searchBar performSelector: @selector(resignFirstResponder) 
                    withObject: nil 
                    afterDelay: 0.1];
  }
}

工作起来很有魅力,而且不像汤姆的恕我直言那样老套。

关于iphone - 点击 X 按钮时从 UISearchBar 中关闭键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4190459/

相关文章:

ios - 当我使用圆角时,UIImageView 图像被拉伸(stretch)。

javascript - 如何检测手机Safari全局方向旋转动画

iphone - IOS HTML5 离线应用程序会在应用商店上架吗?

iPhone - UITextView 应该看起来像 UITextField

ios - 如何让 UITextField 的 textContentType 属性执行任何操作?

ios - 如何使navigationItem.searchController的searchBar使用屏幕的整个宽度

iphone - 检测私有(private) API 的使用

ios - 如何知道 textFields 已完成

iphone - UISearchBar 的颜色像联系人

ios - 是否可以更改搜索栏中取消按钮的垂直位置?