Ich implementiere die Suchleiste für mein Projekt. Die Suche ist in Ordnung. Ich kann die Rohdaten anzeigen und die Daten mit dem Suchtext filtern. Wenn ich auf die Zelle des Suchergebnis-TableViews tippe, ging es nicht in die Detailansicht über. Aber für die Rohdaten kann ich in die Detailansicht wechseln. Ich verwende die Methode prepareForSegue
, da ich Storyboard verwende. Hier ist der Code so weit,Suchleiste mit prepareForSegue für 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];
}
}
}
Wenn ich didSelectRowAtIndexPath
Methode versucht, mit, ich kann in die Detailansicht wechseln. Aber ich habe Fehlermeldung wie folgt aus:
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>.
Hier ist der Code für 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");
}
}
Vielen Dank für Hilfe.
Das reparierte es für mich auch! Ich habe versucht, dieses schwer fassbare Problem für meine erste App für eine Woche oder so jetzt zu lösen! Danke für das Teilen. –
'self.searchDisplayController.active' Teil hat meine Nacht gerettet !! Vielen Dank. Ich folgte diesem Tutorial und konnte es nicht funktionieren: http://www.raywenderlich.com/16873/how-to-add-search-into-a-table-view Ihre Lösung löste mein Problem. – scaryguy
Danke! In meinem Fall war das Problem die Verwendung von self.tableView anstelle von self.searchDisplayController.searchResultsTableView. – Borzh