0

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

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

尝试解决此问题时,我发现在搜索是否在点击任何单元格之前关闭键盘时,我能够正确地进行搜索,因此似乎只有在键盘存在时才会发生这种情况。

我想我可以在 segueing 之前以编程方式关闭键盘来解决这个问题,但我也担心我可能UISearchBar对 . 或UITableView.

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

编辑

这是我用来segue的代码

- (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];
    }
}
4

1 回答 1

1

As you already pointed out you need to resign the first responder (lower the keyboard). Your [self.view endEditing:YES]; is essentially doing this.

于 2012-12-12T16:48:00.320 回答