Wie Sie einen Navigation-Controller mit Interface Builder?
1. Schritt: Erstellen Sie eine neue UIViewController:
- Xcode -> Neue Datei... -> Cocoa Touch Class aus -> UIViewController
- Name: MyViewController
2. Schritt: Drag-and-drop einen "Navigation Controller" (UINavigationController) aus der Bibliothek zu MyViewController.xib
3.Schritt: ich bin mir sicher, ich habe etwas zu tun, verbinden Sie den Navigation-Controller korrekt, nicht wahr?
4.Schritt: Versuchen, starten Sie den neuen View-Controller als modales Dialogfenster:
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
NSLog(@"navContr: %@", myViewController.navigationController);
[self.navigationController presentModalViewController: myViewController animated:YES];
Ergebnis: "navContr: nil"
5.Schritt: sehen Sie die neue modal view (MyViewController), aber es gibt keine NavigationController und keine UINavigationBar.
Danken Ihnen sehr für Ihre Hilfe!
UPDATE 1:
6.Schritt: ich einen neuen UIViewController (ViewNavi2) als "Root View Controller":
7.Schritt: definiere ich eine IBOutlet UINavigationController *navigationController
in der Klasse MyViewController und konfigurieren Sie die xib: Navigation-Controller -> Verbindungen -> Referencing Outlets
Aber meine Navigation-Controller ist immer noch null 🙁
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
NSLog(@"navContr: %@", myViewController.navigationController);
//-> "navContr: nil"
InformationsquelleAutor der Frage Manni | 2011-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich wollte auch den Navigations-controller in der NIB-Datei, aber alle, dass die Apple-Dokumentation gesagt wurde, dass es "nicht optimal", ohne tatsächlich zu erklären, wie es zu tun. Ich wollte mein main-Fenster zu nennen, ein modales Fenster mit den typischen Steuerelemente für die navigation ohne Definition der Navigations-controller programmgesteuert. Ich werde erzählen, wie ich es Tat.
Ihren code sehr ähnlich zu mir, da ich auch ein
IBOutlet UINavigationController *navigationController
im MyViewController. Vom Interface Builder, habe ich einfach den vorgegebenen meiner Sicht in der root-view-controller und legen Sie der Besitzer der Datei->Ansicht zu, dass die view definition.Ähnlich wie dein code habe ich Folgendes in meiner Eltern-Fenster:
(Ich rufe presentModelViewController auf das selbst, ich weiß nicht warum, Sie hatte
self.navigationController
.) Wenn ich getestet, das Ergebnis war, dass meine Ansicht war geladen, aus der NIB-Datei, aber die Navigationsleiste fehlt. Eine weitere code-Zeile in MyViewController behoben:Alles was ich hier mache, ist die Einstellung MyViewController Ansicht, zeigen Sie auf myNavigationController.Ansicht, die alles enthält, wurde auf die NIB-Datei, einschließlich der navigation-controller.
InformationsquelleAutor der Antwort Henry
Blick auf die Vorlage in XCode für eine "Navigation-based Application". (Neues Projekt -> Navigation-basierte Anwendung) öffnen Sie Dann das Hauptfenster.xib im Interface Builder. Aber es ist nicht ein Blick, denken Sie daran, wie der viewcontroller, den Sie in Schritt 1 erstellt haben. Dann schauen Sie auf die "Root-View-Controller", auf die verwiesen wird im Bereich "Informationen" und sehen, wie es mit dem "Root-View-Controller" - Feder in der Eigenschaften-inspector und die "RootViewController" - Klasse im Identity inspector.
Werden Sie wollen, um die Inhalte, die Sie anzeigen wollen, an der Wurzel der navigation in Ihrer version von "RootViewController". In der Regel werden die controller angezeigt, die nächste ist eine "DetailViewController". Wieder, Lesen Sie die Beispiel-code, der die Vorlage bietet und Sie werden sehen, wie zu Anfang auf, dass. Blick auf den kommentierten code in
didSelectRowAtIndexPath
in der Beispiel-Vorlage von RootViewController.m. Erstellen Sie sich Ihren eigenen view-controller zu dienen, wie der DetailViewController.Hoffentlich wird klar, was sich für Sie.
//ÄNDERUNGEN basierend auf Ihren Kommentar//
Die Apple docs sagen, dass, wenn Sie verwenden möchten, IB, um Ihren Navigation-Controller sollte man wirklich setzen Sie diese in Ihrem Hauptfenster.xib. Ich war mit dem basteln für die Tatsache, dass Sie nicht den NavigationController als Untersicht Ihrer UIView-Objekt. Was Sie tun können, gegeben, wo Sie begonnen haben, ist die Verwendung von IB zum hinzufügen einer Navigationsleiste-Objekt der view-controller und dann die Kontrolle über die Dinge von dort aus.
Aus der Apple-Dokumentation "Sie könnten Zwar auch laden, standalone oder Modal vorgestellt navigation-Controller vom main nib-Datei (oder jede andere nib-Datei), dies ist also nicht optimal. In diesen Szenarien ist es meist einfacher, die Erstellung der navigation-controller programmgesteuert auf den Punkt zu verwenden."
//WEITERE BEARBEITUNGEN//
In XCode4 das Projekt-template ist jetzt als "Master-Detail" - Projekt. Dies ist, weil es als ein split-view-controller iPad, aber immer noch ein regelmäßiges navigation Projekt im iPhone. Wo ich mich auf "RootViewController" in der Antwort finden Sie nun etwas namens "MasterViewController"
InformationsquelleAutor der Antwort Walter
Den nächsten code wird nicht geben Ihnen keine gültige Objekt.
Der Grund ist, weil navigationController Eigenschaft von UIViewController gibt nur einen navigation-controller, wenn der view-controller wird in seinem stack. Diese Eigenschaft ist null, wenn eine Navigations-controller nicht gefunden werden kann. Ihre view-controller wird nicht in den stack des navigation-controller. Ja, ich bin auch nicht sicher, ob Sie richtig initialisiert werden unsere navigation controller. Lesen Sie einige Unterlagen.
InformationsquelleAutor der Antwort Oleg Danu