Laden UINavigationController aus einer anderen Feder automatisch von UITabBarController
-
22-08-2019 - |
Frage
Ich denke, dass ich die Ursache gefunden haben: Dokument-Info-Fenster in IB hat eine Warnung: "‚Selected Navigation Controller (Zweite)‘hat Eigenschaft nib Name auf‚SecondView.nib‘, aber diese Ansicht-Controller nicht beabsichtigt, seine Ansicht Satz auf diese Weise zu haben. "
Bummer.
Ich habe gebaut Spitze im Interface Builder, die auf höchstem Niveau und schaltet zwischen UITabBarController
s UINavigationController
hat.
Es funktioniert gut, wenn alles in einer einzigen nib
Datei ist, aber ich mag getrennte nib
Dateien für UINavigationController
s verwenden.
Beginnend mit Apples TabBar-Vorlage, wenn ich nur Klasse von SecondView ändern UINavigationController
, es alle Pausen:
und alles, was ich bekommen, ist dies:
// imgur has lost the image, sorry //
Ist es möglich, separate Datei für UINavigationController
zu haben, ohne alles programmatisch einstellen?
Ich mag TabBarController
Be- und Entladen von Nibs zu behandeln.
Lösung
tauscht einfach die UINavigationController mit dem FirstViewController.
So ist die Hierarchie so sein sollte:
Tab bar controller
-----Tab bar
-----Navigation Controller
----------First View Controller
---------------Navigation Item
----------Tab bar item (First)
-----Navigation Controller
----------Second View Controller
---------------Navigation Item
----------Tab bar item (Second)
Sie stellen die Spitze der First View-Controller im Inspektor auf die NIB-Datei die aktuelle Ansicht Objekte enthält (Da Sie versuchen, sie in separate Dateien aufgeteilt, was eine gute Sache ist).
Sie haben einen Vorsprung, dass Tab hat eine Navigationssteuerung, den First View Controller als seine Stammansicht lädt.
Fertig.
Andere Tipps
Ich habe nicht versucht UINavigationController über IB einrichten. Ich habe mehrere Bildschirme, die jeweils in getrennter XIb gespeichert und es gibt eine entsprechende Klasse, die UIViewController erstreckt. In applicationDidFinishLaunching initialisieren ich UIViewControllers xib die Verwendung aber dann UINavigationController manuell erstellen, Navigationssteuerung Sicht auf Fenster hinzufügen und den ersten Blick zur Navigation Controller drücken.
Nicht sicher, ob das hilft.
- (void)applicationDidFinishLaunching:(UIApplication *)application {
navigationController = [[UINavigationController alloc] init];
FirstViewController * viewController = [[FirstViewController alloc]
initWithNibName:@"FirstView"
bundle:nil];
[navigationController pushViewController:viewController animated:NO];
[viewController release];
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
}
Über FirstViewController erstreckt UIViewController, in IB Sie die Ansicht dann setzen Datei Besitzer Klasse Ihrer Klasse erstellen (zum Beispiel hier FirstViewController) und verbinden Sie den Eigentümer nach Ansicht der Datei der Ansicht der UIView.
Ich glaube, Sie suchen nach etwas, wie diese. Sie würden „was auch immer“ mit dem Namen von Ihnen zweiter nib-Datei ersetzen.
newNavController = [[UINavigationController alloc] initWithNibName:@"whatever" bundle:[NSBundle mainBundle]];
Zuerst sieht es aus wie Sie Ihre UITabBarItem
s haben unter der Navigation-Controller statt direkt unter dem UITabBarController
. Das kann ein Teil des Problems sein.
Zweitens, wenn Sie eine UITabBarController
in IB hinzufügen und und in der Liste der Top-Level-Objekte (Ihr erster Screenshot) auf das Symbol klicken, wird der Attribute-Inspektor können Sie die Art der View-Controller für jede der Registerkarten ändern . Mit dieser kann man sie alle zur Navigation Controller ändern, wenn Sie es wünschen. Auch da Sie benutzerdefinierte Ansichten und View-Controller von anderen Nibs laden wollte, wenn man sich die „View Controller“ am unteren Rand des Attribute-Inspektor sehen, können Sie eine Feder aus dem Projekt wählen Sie die Ansicht aus zu laden. betreffende Spitze der „Datei Besitzer“ auf Ihre UINavigationController
Unterklasse Angenommen, es sollte alles funktionieren.
All dies ohne eine große Menge Arbeit der Codierung, auch nicht. Lassen Sie uns wissen, wenn Sie Screenshots für mögen, was ich rede, falls über Sie diese Tafeln nicht finden können.
fand ich die gleichen warning.I alle View-Controller in separaten Dateien xib gehalten haben. Ich losgeworden von ihm weg von .nib Namen zu entfernen und es leer zu halten.