我有一个表视图,与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上被解雇。
答案 0 :(得分:1)
使用这种神奇的方法。我一直都在使用它,好处是它总是适用于任何领域,无论在哪里(因为它在主窗口中)和哪个。
+ (void)dismissKeyboard {
[[YOURAPPDELEGATE window] endEditing:YES];
}
编辑:
好的,用你问题的“更新2”得到它。表单不是搜索字段的行为。
答案 1 :(得分:0)
将searchBarSearchButtonClicked:
委托方法替换为此方法:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
[self.view endEditing:TRUE]; //This will dismiss the keyboard
}