0

UITableViewチャットルームのリストを表示する場所があります。また、検索バーを使用して特定のチャット ルームを見つけています。ユーザーがセルをタップすると、チャット ルームの会話に移り、メッセージとメッセージを送信するためのテキスト ボックスが表示されます。

ただし、検索バーを使用してチャット ルームを検索すると、任意のセルをタップするとセグエが行われますが、チャット ルームのレイアウトが正しくありません。会話ビュー (カスタムUITableView) が画面全体に表示され、テキスト ボックス (下部の のすぐ上TabBar) は表示されません。

この問題を解決しようとして、セルをタップする前にキーボードを閉じた場合、検索時に正しくセグエできることがわかったので、これはキーボードが存在する場合にのみ発生しているようです。

セグエの前にプログラムでキーボードを閉じることでこの問題を解決できると思いますが、UISearchBarまたはUITableView.

私のターゲット プロジェクトは 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];
    }
}
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 に答える