UISearchDisplayController搜索栏不会关闭键盘



我有一个表视图,与UISearchDisplayController一起使用,UISearchDisplayControl将UISearchBar合并到表视图的标题中。当用户点击键盘上的"搜索"时,我无法关闭键盘。我在我的视图控制器中完成了以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setTitle:[NSString stringWithFormat:NSLocalizedString(@"ViewTitle", nil), _hotspots.count]];
    // Set up view options
    if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [_tableView setSeparatorInset:UIEdgeInsetsMake(0, 15, 0, 0)];
    }
    [_tableView setTableFooterView:[[UIView alloc] init]];

    // Fix for the issue where search bar would display incorrectly on iOS 7 modal iPad view
    if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
        self.edgesForExtendedLayout = UIRectEdgeNone;
    }

    // Set localisable strings for interface elements
    [self.searchDisplayController.searchBar setPlaceholder:NSLocalizedString(@"PlaceholderText", nil)];

    // Hide Search Bar
    CGRect newBounds = _tableView.bounds;
    newBounds.origin.y = newBounds.origin.y + self.searchDisplayController.searchBar.bounds.size.height;
    _tableView.bounds = newBounds;

    // Set our search bar delegate methods
    [self.searchDisplayController.searchBar setDelegate:self];
}

我还实施了UISearchBar的相关委派方法。。。

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar
{
    return YES;
}

当我点击键盘上的"搜索"时,搜索栏确实会退出第一响应程序状态,但键盘不会被关闭。我仍然可以继续键入文本,但它没有输入到我的文本栏中,再次点击"搜索"按钮不会触发上述委托方法。

我也试过用[self.view endEditing:YES]代替[searchBar resignFirstResponder],但没有效果。

奇怪的是,这在iOS 6和iOS 7上的表现有所不同……在iOS 6上,搜索按钮永远不会正确地关闭搜索bae,但在iOS 7上,如果我在searchDisplayController的表视图中选择了一个项目,它会推送一个新视图,当我返回到包含searchDisplayControl的视图时,"搜索"按钮每次都会正确地关闭键盘。

有人能告诉我这里发生了什么吗?

更新:

附加信息,这是一个非常简单的视图控制器,它有一个表视图、一个数据源和搜索显示控制器代码。我在iPad上的模式视图(表单)中显示它,界面包含在故事板中。

更新2:

需要澄清的是,只有当视图显示在模态(表单)视图中时,这个问题才会发生在iPad(iOS 6和7)上,iPhone上的键盘会被关闭。

使用这个神奇的方法。我一直在使用它,好的是它总是适用于任何领域,无论在哪里(因为它在主窗口中)和哪个领域。

+ (void)dismissKeyboard {
    [[YOURAPPDELEGATE window] endEditing:YES];
}

编辑:

好的,通过你的问题的"更新2"得到了。这是表单的行为,而不是搜索字段的行为。

查看此链接:模式对话框不解除键盘

用以下方法替换searchBarSearchButtonClicked:委托方法:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];
    [self.view endEditing:TRUE]; //This will dismiss the keyboard
}

最新更新