私はsearchControllerを持っており、それにはsearchResultsControllerがあります。検索バーで検索すると、結果コントローラに検索結果が表示されますが、セルの1つをタップすると詳細ビューコントローラは表示されません。それを表示するには、検索バーの横にあるキャンセルボタンをクリックし、searchResultsControllerが消えると詳細ビューが表示されます。子ビューからの親ビューでsegue関数が呼び出されていることがわかります。 searchResultsControllerのテーブルビューの代理人はすべてsearchControllerを指しています。子から親ビューのperformSegueWithIdentifierを呼び出すとビューが変更されません
キャンセルボタンを押すまで表示が変わらないのはなぜですか?
検索コントローラクラス:
// parent view controller
- (void) showContact:(Contact*)contact
{
NSLog(@"Did tap contact id:[%@]",contact.id);
[self performSegueWithIdentifier:@"contactPressed" sender:contact];
}
- (void)contactsSearchTableDelegate:(ContactsSearchTableDelegate *)delegate
didTapContact:(Contact *)contact
{
[self showContact:contact];
}
委任クラス:
// delegate, searchController and searchResultsController both point here
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.delegate contactsSearchTableDelegate:self didTapContact:[self contactAtIndexPath:indexPath]];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
しかし、この場合、詳細ビューから戻っても検索には戻りませんが、リスト全体に戻ってきます。どのようにその機能を保持しますか?具体的には、入力したテキストや検索結果に関係なく、検索に戻ります。 – Minimi
私はあなたが持っている必要があるようなアーキテクチャを想像したことはないと思います。私は通常、その中に検索バーを持つメインビューコントローラを持っています。ユーザーが検索すると、検索コントローラは検索結果コントローラでそのビューを表示します。したがって、プレーン・テーブルと検索結果を示すフィルタリングされたテーブルの2つのビューしかありません。あなたは物語の中にいくつかのビューコントローラーを持っていますか?私はそれを想像することができません。あなたは何をしているのかをもっと詳しく記述できますか? – matt
いいえ私は第3のView Controllerを持っていません。私はあなたが言ったことを正確に持っています。しかし、ユーザーが検索結果のセルの1つをタップすると、新しいビューにはそのセルの詳細(連絡先情報)がポップアップするはずです。しかし、これは起こらない、私は検索バーの横にあるキャンセルボタンを押すだけで、表示がポップアップします。 – Minimi