UISearchDisplayController搜索栏不会关闭键盘?

时间:2013-11-19 13:43:58

标签: ios objective-c ios7 uisearchbar uisearchdisplaycontroller

我有一个表视图,与UISearchDisplayController一起使用,它将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;
}

当我点按“搜索”时在键盘上,搜索栏确实辞职了第一响应者状态,但键盘没有被解雇。我仍然可以继续输入文字,但它没有输入我的文字栏,并点按了“搜索”字样。按钮再次不会触发上面的委托方法。

我还尝试将[searchBar resignFirstResponder]替换为[self.view endEditing:YES],而{{1}}无效。

奇怪的是,这在iOS 6到iOS 7上表现不同...在iOS 6上,搜索按钮永远不会正确地解除搜索bae,但是在iOS 7上,如果我在searchDisplayController中选择一个项目&#39 ; s tableview,它推送一个新视图,当我返回到包含searchDisplayController的视图时,'搜索'按钮每次都正确地解开键盘。

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

更新

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

更新2:

要澄清一下,这个问题只发生在iPad(iOS 6和7)上,当视图以模态显示时(表单'视图,键盘在iPhone上被解雇。

2 个答案:

答案 0 :(得分:1)

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

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

编辑:

好的,用你问题的“更新2”得到它。表单不是搜索字段的行为。

请看这个链接:Modal Dialog Does Not Dismiss Keyboard

答案 1 :(得分:0)

searchBarSearchButtonClicked:委托方法替换为此方法:

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