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.

5voto

Zach Mathew Punkte 431

Ich hatte das gleiche Problem und bin zufällig über diese Lösung gestolpert ...

Wenn Sie Ihren Table View Controller (z.B.. UISearchDisplayController ) in einer Registerkartenleiste oder einem Navigationscontroller mit Interface Builder verschachtelt ist, müssen Sie den "Nib-Namen" im Fenster "Attribute Inspector" festlegen.

Der Nib-Name ist derjenige, der die Tabellensicht enthält und den Controller hat (z.B. UISearchDisplayController ) als Dateieigentümer.

1voto

Mugunth Punkte 14391

Ich habe auch dieses Problem :( Wird die Suchleiste hinter dem Tableview versteckt?

@unforgiven, hast du das versucht...?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar];

Dadurch wird manuell eine Suchleiste erstellt, und es funktioniert. Aber ich mache einen dummen Fehler in IB, dass die Suchleiste nicht angezeigt wird, obwohl meine Verbindungen perfekt sind :-(

Bitte aktualisieren Sie diesen Beitrag, wenn Sie die Antwort erhalten...

1voto

Massimo Cafaro Punkte 25302

Ok, ich habe eine Lösung für das Problem gefunden. In meinem Fall war das Problem aufgrund der Tatsache, dass ich einen Controller eingebettet innerhalb der UITabBarController als eine seiner verwalteten Registerkarten (d.h. als Kind) verwendet wurde.

Entfernen des Controllers aus dem UITabBarController, dann Hinzufügen eines UINavigationController zum UITabBarController stattdessen, und schließlich setzen meine Controller als ein Kind des UINavigationController vollständig das Problem gelöst.

Ich verstehe nicht, warum das so ist (in der Dokumentation gibt es dazu keine Informationen, wie so oft); aber jetzt funktioniert es wunderbar. Mit freundlichen Grüßen.

1voto

joneswah Punkte 2738

Ich hatte ein ähnliches Problem

Zur Lösung musste ich einen zusätzlichen Schritt zu unforgivens Antwort machen In meiner Haupt-Feder

1) einen UITabController erstellen 2) Dann habe ich einen UINavigational Controller in den TabController gezogen 3) Dann zog ich einen UITableViewController in den NavigationalController als Kind 4) Dann änderte ich die Klasse (3) im Inspektor in meinen MyTableWithSearchBarViewController - überprüfen Sie, ob der Nib-Name korrekt ist und ändern Sie diesen gegebenenfalls auch im Inspektor 5) Dann musste ich die tableView löschen, die von IB in Schritt (3) automatisch erstellt wird. Erst dann wurde die Suchleiste korrekt angezeigt...

Wenn ich in Schritt 3 einen anderen Controller auf die Bühne ziehe oder die tableView dort lasse, wird immer nur die Tabelle und nicht die Suchleiste angezeigt

seltsam

1voto

dodgio Punkte 2069

Tomtrapeze hat die richtige Antwort, wenn Ihre nib-Datei den UITableViewController enthält. Aber wenn Sie den UITableViewController in Code laden - z.B. indem Sie ihn auf den Stapel eines UINavigationControllers schieben - ist die Lösung ein wenig anders.

Wenn Sie den UITableViewController oder eine Unterklasse initialisieren, müssen Sie die -initWithNibName:bundle: Form des Initialisierers verwenden und den Namen Ihrer nib-Datei angeben. Alternativ können Sie auch den Standardinitialisierer -initWithStyle: verwenden und die Eigenschaft nibName manuell festlegen, bevor die Ansicht geladen wird.

Wenn die nibName-Eigenschaft nicht gesetzt ist, wenn der View geladen wird, verwendet UITableViewController nicht die normale UIViewController nib-Lookup-Logik. Es wird stattdessen einfach eine Standard UITableView geladen.

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