2016-11-03 7 views
0

私は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]; 
} 

答えて

1

検索結果コントローラはビューコントローラを発表している

は、ここでは、コードの一部です。ビューは画面をカバーし、開始したView Controllerのビューを置き換えます。したがって、ビューコントローラのビューはビュー階層にはなく、どこからでも移動することはできません。したがって、コードでは、手動で行う処理を行う必要があります。検索をキャンセルして、提示されたView Controllerを終了し、最初のView Controllerに戻り、そこで処理を進める必要があります。

+1

しかし、この場合、詳細ビューから戻っても検索には戻りませんが、リスト全体に戻ってきます。どのようにその機能を保持しますか?具体的には、入力したテキストや検索結果に関係なく、検索に戻ります。 – Minimi

+0

私はあなたが持っている必要があるようなアーキテクチャを想像したことはないと思います。私は通常、その中に検索バーを持つメインビューコントローラを持っています。ユーザーが検索すると、検索コントローラは検索結果コントローラでそのビューを表示します。したがって、プレーン・テーブルと検索結果を示すフィルタリングされたテーブルの2つのビューしかありません。あなたは物語の中にいくつかのビューコントローラーを持っていますか?私はそれを想像することができません。あなたは何をしているのかをもっと詳しく記述できますか? – matt

+0

いいえ私は第3のView Controllerを持っていません。私はあなたが言ったことを正確に持っています。しかし、ユーザーが検索結果のセルの1つをタップすると、新しいビューにはそのセルの詳細(連絡先情報)がポップアップするはずです。しかし、これは起こらない、私は検索バーの横にあるキャンセルボタンを押すだけで、表示がポップアップします。 – Minimi

関連する問題