Frage

Ich habe einen UITabBar Controller mehrere Controller Verwaltung (mit SDK 3.0). Eines davon ist ein Tableview Controller und ich brauche eine Suchfunktion, um die UISearchDisplayController verwenden. All mein Code basiert auf Apple Table Beispiel. Wenn jedoch auf dem Registerkarte klicken, wird der Tableview Controller seinen dazugehörigen Inhalt zeigt, aber keine SearchBar erscheint. Ich habe die xib in IB überprüft, um sicherzustellen, dass alle Auslässe richtig eingestellt sind, aber egal was ich self.searchDisplayController versuchen immer gleich Null und die Suchleiste nicht angezeigt wird.

In der Praxis habe ich MainView.xib aus dem Table Beispiel repliziert und legen Sie die Eigentümer Klasse Datei an den richtigen Controller-Klasse für die Registerkarte. Die Auslässe sind Mengen wie im Beispiel MainView.xib. Bin ich alle wichtigen Schritt fehlt oder etwas falsch zu machen?

Vielen Dank im Voraus.

War es hilfreich?

Lösung 3

Ok, ich habe festgestellt, wie es zu lösen. In meinem Fall war das Problem aufgrund der Tatsache, dass ich eine Steuerung innerhalb des UITabBarController als eines seiner verwalteten Registerkarten (das heißt als Kind) eingebettet wurde mit.

Das Entfernen der Controller aus dem UITabBarController, dann stattdessen eine UINavigationController zum UITabBarController zugibt und schließlich vollständig das Problem löste mein Controller als Kind des UINavigationController setzen.

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

Andere Tipps

Ich hatte das gleiche Problem und zufällig auf diese Lösung stolpern ...

Wenn Sie Ihre Tisch-View-Controller (zB. UISearchDisplayController) verschachtelt in einem Tab-Leiste oder Navigation Controller Interface Builder verwenden, müssen Sie den "Nib-Namen" im "Attribute Inspector" Fenster setzen.

Der Nib Name wird denjenigen, die Tabellen-Ansicht hält und die Steuerung (zB. UISearchDisplayController) als Datei Besitzer.

ich dieses Problem haben :( Ist die Suchleiste hinter dem Tableview versteckt zu werden?

@unforgiven, versuchen, hast du das ...?

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

Das erstellt manuell eine searchbar und es funktioniert. Aber ich mache einige dumme Fehler in IB, dass die SearchBar auch dann nicht angezeigt, obwohl meine Verbindungen perfekt sind. : - (

Sie diesen Beitrag aktualisieren, wenn Sie die Antwort bekommen ...

Ich hatte ein ähnliches Problem

Zur Lösung ich einen weiteren Schritt zu unforgivens Antwort zu tun hatte In meinem Hauptspitze

1) erstellen UITabController 2) Dann schleppte ich einen UINavigational-Controller in der Registerkarte Controller aus 3) gezogen Dann aus einem UITableViewController in die NavigationalController als Kind 4) Dann änderte (3) Klasse meine MyTableWithSearchBarViewController im Inspektoren zu sein - prüfen, ob der Spitze Name korrekt ist und dies als notwendig als auch im Inspektoren, wenn ändern 5) Ich hatte dann die tableview zu löschen, die automatisch von IB in Schritt angelegt wird (3). Erst dann würde die Suchleiste anzeigen richtig ...

Wenn in Schritt 3 schleppte ich einen anderen Controller auf die Bühne oder die Tableview links dort würde es immer nur die Tabelle angezeigt werden und nicht die Suchleiste

seltsam

Tomtrapeze hat die richtige Antwort, wenn Ihre NIB-Datei die UITableViewController enthält. Aber, wenn Sie die UITableViewController in Code sind geladen - wie es auf dem Stapel eines UINavigationController schieben - die Lösung ist ein wenig anders.

Wenn die UITableViewController oder Unterklasse initialisiert, müssen Sie die -initWithNibName verwenden: Bundle: Form initializer und den Namen Ihrer nib-Datei angeben. Alternativ können Sie den Standard -initWithStyle benutzen. Initializer und manuell die nibName Eigenschaft festgelegt, bevor die Ansicht geladen wird

Wenn die nibName Eigenschaft nicht festgelegt ist, wenn die Ansicht geladen wird, UITableViewController wird nicht die normale UIViewController nib Lookup-Logik verwenden. Es wird nur ein Standard-UITableView laden statt.

Ich habe vor kurzem erfahren, dass ich NIB Dateien mit [[MyViewController alloc] initWithNibName:nil bundle:nil]; laden konnte, wenn die NIB-Datei mit dem gleichen Namen wie die Klasse hat (das heißt MyViewController.xib). Es stellt sich heraus, dass auf diese Weise die Initialisierung der ‚UISearchBarandUISearchBarDisplayController` verursacht nicht angezeigt werden soll. Wenn ich den View-Controller, indem tatsächlich die Eingabe aus den Namen der Klasse initialisiert, zeigte meine Suchleiste richtig. Ich dachte zunächst hatte es etwas mit dem zu tun, wie ich den View-Controller präsentiert wurde, war aber froh, dass es nicht.

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

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

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

Dies ist mit iOS SDK 5.1 und XCode 4.3.1.

Eine andere mögliche Lösung, die für mich funktioniert, ist das UITableViewController mit initWithNibName init: Bundle:

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

So verschachteln die UITableViewController in einem UINavigationController, bevor es in einem UITabBarController setzen sich das Problem nicht beheben, für mich ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top