7 Stimmen

Wie verwendet man UISearchDisplayController von einem Controller innerhalb eines UITabBar-Controllers?

Ich habe einen UITabBar-Controller, der mehrere Controller verwaltet (mit SDK 3.0). Einer davon ist ein tableView-Controller und ich muss eine Suchfunktion mit dem UISearchDisplayController bereitstellen. Mein gesamter Code basiert auf dem Apple TableSearch-Beispiel. Wenn ich jedoch auf die Registerkarte klicke, erscheint der tableView-Controller und zeigt den zugehörigen Inhalt an, aber es wird keine Suchleiste angezeigt. Ich habe die xib in IB überprüft, um sicherzustellen, dass alle Ausgänge richtig eingestellt sind, aber egal, was ich versuche self.searchDisplayController ist immer Null und die Suchleiste erscheint nicht.

In der Praxis habe ich MainView.xib aus dem TableSearch-Beispiel repliziert und die Owner-Klasse der Datei auf die richtige Controller-Klasse für die Registerkarte gesetzt. Die Ausgänge sind wie im Beispiel MainView.xib gesetzt. Übersehe ich einen wichtigen Schritt oder mache ich etwas falsch?

Ich danke Ihnen im Voraus.

1voto

TPoschel Punkte 3581

Ich habe kürzlich gelernt, dass ich NIB-Dateien mit [[MyViewController alloc] initWithNibName:nil bundle:nil]; wenn die NIB-Datei denselben Namen wie die Klasse hat (d. h. MyViewController.xib ). Es stellt sich heraus, dass die Initialisierung auf diese Weise die 'UISearchBar and UISearchBarDisplayController` nicht anzeigen. Als ich den View-Controller initialisierte, indem ich den Namen der Klasse eingab, wurde meine Suchleiste korrekt angezeigt. Ich dachte zunächst, dass es etwas damit zu tun hatte, wie ich den View-Controller präsentierte, war aber froh, dass es nicht so war.

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil];

searchVC.modalPresentationStyle = UIModalPresentationFullScreen;
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:searchVC animated:YES completion:^{ }];

Dies geschieht mit iOS SDK 5.1 und XCode 4.3.1.

0voto

Lindemann Punkte 3246

Eine weitere mögliche Lösung, die für mich funktioniert, ist die UITableViewController mit initWithNibName:bundle zu initiieren:

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil];

Den UITableViewController in einem UINavigationController zu verschachteln, bevor man ihn in einen UITabBarController setzt, behebt das Problem für mich nicht...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X