【发布时间】: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