2012-08-05 10 views
6

私は自分のプロジェクトの検索バーを実装しています。検索部分はOKです。生データを表示し、検索テキストでデータをフィルタリングすることができます。検索結果tableViewのセルをタップすると、詳細ビ​​ューに遷移しませんでした。しかし、生データについては、詳細ビューに移行することができます。私はストーリーボードを使用しているのでprepareForSegueメソッドを使用します。 はここで、これまで、DetailViewControllerのprepareForSegueを含む検索バー

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 

    if ([segue.identifier isEqualToString: @"Book Detail Segue"]) { 

    BookDetailsTVC *bookDetailsTVC = segue.destinationViewController; // for the detail view controller 
    bookDetailsTVC.delegate = self; 

    if (self.tableView == self.searchDisplayController.searchResultsTableView) { // The if block is not working 
     NSLog(@"Search Display Controller"); 
     bookDetailsTVC.book = [self.searchResults objectAtIndex: self.searchDisplayController.searchResultsTableView.indexPathForSelectedRow.row]; 
    } else { 
     NSLog(@"Default Display Controller"); 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     bookDetailsTVC.book = [self.objects objectAtIndex: indexPath.row]; 
    } 
} 
} 

私はdidSelectRowAtIndexPathメソッドを使用してみましたとき、私は詳細ビューに移行できるコードです。

  • Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

  • Unbalanced calls to begin/end appearance transitions for <BookDetailsTVC: 0x69b5300>.

ここdidSelectRowAtIndexPathためのコードです:助けを

- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath 
{ 
    BookDetailsTVC *bookDetailsTVC = [[BookDetailsTVC alloc] init]; 

    if (tableView == self.searchDisplayController.searchResultsTableView) { 

    bookDetailsTVC.book = [self.searchResults objectAtIndex: self.searchDisplayController.searchResultsTableView.indexPathForSelectedRow.row]; 

    [self performSegueWithIdentifier: @"Book Detail Segue" sender:self]; 

    NSLog(@"Search Display Controller"); 
} else { 

    bookDetailsTVC.book = [self.objects objectAtIndex: indexPath.row]; 

    [self performSegueWithIdentifier: @"Book Detail Segue" sender: self]; 

    NSLog(@"Default Display Controller"); 
} 
} 

感謝しかし、私はそのようなエラーメッセージが表示されました。

答えて

20

問題が解決され、

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier: CellIdentifier];

へとprepareForSegue方法でcellForRowAtIndexPathで 変更するには、この、あなたがチェックするself.searchDisplayController.activeを使用することができます現在のテーブルビュー

if (self.searchDisplayController.active) { 
    NSLog(@"Search Display Controller"); 
    bookDetailsTVC.book = [self.searchResults objectAtIndex: self.searchDisplayController.searchResultsTableView.indexPathForSelectedRow.row]; 
} else { 
    NSLog(@"Default Display Controller"); 
    bookDetailsTVC.book = [self.objects objectAtIndex: self.tableView.indexPathForSelectedRow.row]; 
} 
+0

それも私のためにそれを修正!私は1週間ほど前から、この最初のアプリでこの謎めいた問題を解決しようとしていました!共有してくれてありがとう。 –

+0

'self.searchDisplayController.active'部分が私の夜を救った!どうもありがとうございました。私はこのチュートリアルに従っていて、動作させることができませんでした:http://www.raywenderlich.com/16873/how-to-add-search-into-a-table-viewあなたの解決策は私の問題を解決しました。 – scaryguy

+0

ありがとう!私の場合、問題はself.searchDisplayController.searchResultsTableViewの代わりにself.tableViewを使用していました。 – Borzh

1
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 

     self.selectedPerson = [self.searchResults objectAtIndex:indexPath.row]; 

     PersonasDetalle *pd = [self.storyboard instantiateViewControllerWithIdentifier:@"PersonaDetalle"]; 
     pd.persona = self.selectedPerson; 

     [self.navigationController pushViewController:pd animated:YES]; 

    } 
}