Sto implementando la barra di ricerca per il mio progetto. La parte di ricerca è ok. Posso visualizzare i dati grezzi e filtrare i dati con il testo di ricerca. Quando tocco la cella della tabella dei risultati di ricerca, non è passata alla visualizzazione dei dettagli. Ma per i dati grezzi posso passare alla visualizzazione dei dettagli. Io uso il metodo prepareForSegue
mentre sto usando lo storyboard. Ecco il codice finora,Barra di ricerca con prepareForSegue per DetailViewController
- (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];
}
}
}
Quando provato ad utilizzare didSelectRowAtIndexPath
metodo, posso transizione al dettaglio. Ma ho ricevuto il messaggio di errore del genere:
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>.
Ecco il codice per 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");
}
}
Grazie per l'aiuto.
Questo lo ha risolto anche per me! Ho cercato di risolvere questo problema elusivo per la mia prima app per circa una settimana ora! Grazie per la condivisione. –
La parte 'self.searchDisplayController.active' ha salvato la mia notte !! Grazie mille. Stavo seguendo questo tutorial e non riuscivo a farlo funzionare: http://www.raywenderlich.com/16873/how-to-add-search-into-a-table-view la tua soluzione ha risolto il mio problema. – scaryguy
Grazie! Nel mio caso il problema era usare self.tableView invece di self.searchDisplayController.searchResultsTableView. – Borzh