【问题标题】:UISearchDisplayController search bar will not dismiss keyboard?UISearchDisplayController 搜索栏不会关闭键盘?
【发布时间】:2013-12-03 02:26:40
【问题描述】:

我有一个表格视图,它与 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;
}

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

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

奇怪的是,这在 iOS 6 和 iOS 7 上的行为不同......在 iOS 6 上,搜索按钮永远不会正确关闭搜索按钮,但是在 iOS 7 上,如果我在 searchDisplayController 的 tableview 中选择一个项目,这会推送一个新视图,当我返回到包含 searchDisplayController 的视图时,“搜索”按钮每次都会正确关闭键盘。

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

更新:

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

更新 2:

澄清一下,这个问题只发生在 iPad(iOS 6 和 7)上,当视图以模态(表单的视图)显示时,iPhone 上的键盘可以正常关闭。

【问题讨论】:

  • 尝试更改 [searchBar resignFirstResponder];与 [nameYourUISearchBar resignFirstResponder];
  • 刚试过......同样的事情发生了:(

标签: ios objective-c ios7 uisearchbar uisearchdisplaycontroller


【解决方案1】:

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

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

编辑:

好的,通过您的问题的“更新 2”得到它。这是表单的行为,而不是搜索字段的行为。

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

【讨论】:

  • 不,对我不起作用...我开始认为这是 iOS 7 SDK 中的错误
  • 我真的不知道还有什么要展示的,这是一个非常简单的视图,带有表视图委托方法、数据源和 UISearchDisplayController 代码......它是在模态视图中实现的,并附加到情节提要中的界面。
  • 您能否提供更多的 viewDidLoad,尤其是与您的 searchDisplayController 相关联的内容?
  • 是的!非常感谢,这就是答案……在 UINavigationController 上创建一个类别来实现 disablesAutomaticKeyboardDismissal 解决了这个问题!
【解决方案2】:

用这个替换你的 searchBarSearchButtonClicked: 委托方法:

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

【讨论】:

  • 你的接口 .h 文件中是否符合 SearchController 协议? <UISearchBarDelegate, UISearchDisplayDelegate>
  • 是的,我做到了,我不知道我还能做什么!
猜你喜欢
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 2020-02-14
  • 2014-09-23
  • 2014-05-29
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多