如果键盘未被解除,则在使用搜索栏时分段会更改目标视图控制器布局



我有一个UITableView,其中显示聊天室列表。我还使用搜索栏来查找特定的聊天室。当用户点击一个单元格时,它会进入聊天室对话,显示消息和发送消息的文本框。

然而,如果我使用搜索栏搜索聊天室,当我点击任何单元格时,segue都会完成,但聊天室的布局是错误的。对话视图(自定义UITableView)会填充整个屏幕,而文本框(位于TabBar的底部和顶部)不会出现。

为了解决这个问题,我发现如果在敲击任何单元格之前关闭键盘,我可以在搜索时正确地分段,所以似乎只有当键盘存在时才会发生这种情况。

我想我可以用程序解决这个问题,在继续之前先关闭键盘,但我也担心我可能在UISearchBarUITableView上做错了什么。

我的目标项目是iOS 5.1,我在运行5.1的iPad 3、运行6.01的iPad 2和iPhone模拟器中复制了这个问题。

编辑

这是我用来分割的代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.searchController.searchResultsTableView == tableView) {
self.selectedItem = [self.filteredItems objectAtIndex:[indexPath row]];
} else {
self.selectedItem = [self.items objectAtIndex:[indexPath row]];
}
[self performSegueWithIdentifier:@"segueChatRoom" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[self.view endEditing:YES]; // This line solves the issue
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"Custom title" style: UIBarButtonItemStyleBordered target: nil action: nil];
[[self navigationItem] setBackBarButtonItem: newBackButton];
if ([segue.identifier isEqualToString:@"segueChatRoom"]) {
[segue.destinationViewController setItem:self.selectedItem];
}
}

正如您已经指出的,您需要退出第一响应程序(降低键盘)。您的[self.view endEdition:YES];本质上就是这样做的。

最新更新