Hierarchische Navigation mit UINavigationController

von @ralfebert · veröffentlicht am 5. Mai 2018

Ein UINavigationController ist ein UIViewController, der einen Stapel von UIViewControllern verwaltet. Die Navigations-Bar mit Zurück-Button und Titel wird dabei automatisch angezeigt und aktualisiert:

UINavigationController-Stapel mit Navigations-Bar

Initial zeigt ein Navigation Controller seinen Root View Controller an, der im Storyboard über ein Relationship-Segue-Übergang festgelegt wird:

Root View Controller relationship im Storyboard

Innerhalb eines UINavigationControllers bekommen UIViewController ein navigationItem zur Konfiguration der Navigation-Bar gesetzt:

Navigation-Item im StoryBoard

Programmatische Navigation

Alternativ zu Storyboard-Segues kann die Navigation über Controller-Methoden erfolgen. Dazu kennen UIViewController den Navigations-Controller in dem sie enthalten sind. Mit pushViewController wird ein View-Controller auf den Stapel gelegt und angezeigt:

let viewController = self.storyboard!.instantiateViewController(withIdentifier:"Example")
self.navigationController?.pushViewController(viewController, animated: true)

popViewController entfernt den aktuellen View-Controller vom Stapel und zeigt den darunterliegenden an:

self.navigationController?.popViewController(animated:true)

Weitere View-Controller

  • UITabBarController zeigt mehrere UIViewController nebeneinander in Tabs an. Typischerweise enthält jeder UITabBarController-Tab eine eigene UINavigationController-Hierarchie:

    UITabBarController: Hierarchie im Storyboad
  • UISplitViewController ordnet zwei UIViewController in einer Master/Detail-Beziehung nebeneinander an: Im linken Master-View, typischerweise eine Navigation über alle Inhalte, werden die Inhalte für das Detail-View auf der rechten Seite ausgewählt. Meist wird dabei die Navigation im Hochformat immer angezeigt und im Querformat per Button-Tap eingeblendet.

    UISplitViewController im Storyboard
  • UIPageViewController verwaltet mehrere UIViewController, zwischen denen hin- und hergeblättert werden kann (die Seiten müssen im Code konfiguriert werden, Storyboard-Segues können hier nicht verwendet werden):

    UIPageViewController