Swift - Segue

Aus Wikizone
Version vom 24. Januar 2023, 14:26 Uhr von 134.3.86.14 (Diskussion)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Links[Bearbeiten]

UINavigationController
UIKit Framework
Swift (Programmiersprache)

Segue - Quickstart[Bearbeiten]

  • Von einem ViewController mit control zum anderen ziehen (entweder in den Ansichten (gelber Bobbel) oder im Sideview.
  • Art auswählen
  • Identifier vergeben (Property Panel) z.B. goToResults

Segue Code für den Übergang[Bearbeiten]

Im Start Controller kann man nun den ZielView mit der performSegue Funktion die jeder View enthält aufrufen:

self.performSegue(withIdentifier: "goToResult", sender: self)

Wenn man außerdem im Zielview Properties setzen möchte kann man das mit der prepare Funktion machen. Diese Funktion wird automatisch aufgerufen wenn man performSegue ausführt.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // you should check if it's the right segue
    if segue.identifier == "goToResult" {
        print(segue.identifier!)
        /**
         Originally prepare() targets a UIViewController. 
         But as we created our view we also created a Subclass of UIViewController 
         Thus we have to tell which subclass our destination is in the override function. 
         We can do that by using the "as" keyword . This is called DOWNCASTING.
             
         Exclamation mark (!) means it is a forced downcast. Like with Optionals 
         this expresses our certainty that the target is a ResultViewController
         */
        let destinationVC = segue.destination as! ResultViewController
        destinationVC.bmiValue = calculatorBrain.getBMIValue()
        destinationVC.advice = calculatorBrain.getAdvice()
        destinationVC.color = calculatorBrain.getColor()
        /**
         via the destination we have access to the destinations properties and can set them.
         */
    }
}

Zurück zum Hauptlayer[Bearbeiten]

Der neue View liegt wie oben erstellt einfach über dem Mainview. Daher können wir ihn einfach wieder schließen um wieder zum Mainview zu kommen.

    @IBAction func recalculatePressed(_ sender: UIButton) {
        self.dismiss(animated: true,completion: nil)
    }

Buttons öffnet View - The Fast Way[Bearbeiten]

Eine schnelle Möglichkeit einen View über einen Button zu öffnen: Control Drag von einen Button auf einen neuen View. > Art wählen z.B. Show Rechtsklick auf den Button zeigt dir danach die Action die für den Button angelegt wurde.

Navigation Stack und Übergänge[Bearbeiten]

Ausgehend vom Main View werden weitere Views wie ein Stapel Pfannenkuchen aufeinandergelegt. Es gibt verschiedene Segues, also Übergänge. Mit der Methode bei der wir einen Button direkt verbinden kann der User jederzeit zum andern View wechseln. Wenn wir programmatisch eingreifen müssen (z.B. bei einem LoginScreen) müssen wir die Views verbinden und die Übergänge über den Code regeln.

Segue mit Navigation Controller[Bearbeiten]

Für Apps mit mehreren Screens kann man einen Navigation Controller nutzen. Mit diesem kann man eine komfortable Navigation Bar erzeugen, die dem User hilft durch die Screens zu steuern. Inkl. Backbutton wie man es von vielen Apps her kennt.

  • Root ViewController auswählen
  • Editor > Embed in > Navigation Controller

Der Hauptscreen und alle verbundenen Screens bekommen jetzt eine Navigation Bar inkl. Back Button.

Segues Identifier[Bearbeiten]

Segues die über Code gesteuert werden benötigen einen Identifier, damit wir sie ansprechen können.

  • Segue auswählen
  • Identifier im Properties Panel angeben (z.B. RegisterToChat)