2. Mai 2019

Zusammensetzen und Einbetten von UIViewControllern

Neben der View-Hierarchie bilden auch die View-Controller eine Hierarchie. Komplexe Screens können aus mehreren UIViewControllern zusammengesetzt werden, um das Massive View Controller-Problem (riesige View-Controller-Klassen die sehr viele Zuständigkeiten vermischen) zu lösen.

Via Storyboard

Mit dem Container-View können andere View-Controller eingebettet werden um komplexe Controller aufzuteilen:

Container View Embedded Viewcontroller Example

Programmatisch

Zum Einbetten eines Controllers müssen folgende Schritte erfolgen:

  1. View-Controller instantiieren, z.B. über Storyboard ID aus dem Storyboard laden:

    let viewController = self.storyboard!.instantiateViewController(withIdentifier: "Example")
  2. View des Controllers holen:

    guard let subview = viewController.view else { return }
  3. ViewController als untergeordneten Controller in die Hierarchie einfügen:

    addChild(viewController)
  4. View des untergeordneten Controllers im View des übergeordneten Controllers platzieren, ggf. dabei layouten / Constraints anlegen:

    view.addSubview(viewController.view)
  5. Benachrichtigung didMove senden (willMove erfolgt automatisch beim Aufruf von addChild):

    viewController.didMove(toParent: self)