Segues in Swift

Verbinden von View Controllern

Verwenden der storyboard Um eine Reihe von UIViewControllers miteinander zu verbinden, müssen Objekte auf die storyboard gezogen und abgelegt werden.

Zuerst wird der anfängliche Ansichtscontroller zum Navigationscontroller hinzugefügt

Das folgende animierte GIF zeigt, wie drei View Controller in einer Reihe platziert werden können, wobei zwischen jedem ein einfaches segue hinzugefügt wird, das als Show-Segue festgelegt ist, was bedeutet, dass jeder View Controller hineingleitet.

Ich habe die Segmente moveToSecond und moveToThird zwischen dem ersten und zweiten Ansichtscontroller bzw. dem zweiten und dritten Ansichtscontroller benannt.

Schaltflächen mit Aktionen hinzufügen

Wir müssen für jeden View Controller eine Schaltfläche hinzufügen (um Code zu schreiben, um die segue ).

Dies ist eine relativ einfache Drag & Drop-Operation (nur die erste Schaltfläche wird hier angezeigt)

Verschieben von Daten: Übergeben von Daten durch einen Segue

Es ist möglich, Daten mit einem segue von einem View Controller an einen anderen zu übergeben.

Wenn wir zum ersten Ansichtscontroller wechseln, erhalten wir Folgendes, wobei der wichtige Teil auskommentiert ist (FirstViewController ist die Klasse, die sich auf den ersten Ansichtscontroller bezieht, wie im animierten GIF oben gezeigt), und die Schaltflächenaktion wird ausgedrückt.

Wir werden dies verwenden, um Informationen von einem View Controller an einen anderen zu übergeben, indem wir performSegue(withIdentifier: String, sender: Any?) verwenden und sie in der Schaltflächenaktion einrichten.

Wir aktualisieren die Aktion, um den segue moveToSecond aufzurufen (wie oben genannt). In diesem Fall müssen wir den Absender nicht kennen, daher kann dies null sein, aber wir müssen absolut sicher sein, dass die Zeichenfolge segue korrekt identifiziert ist. Wir alle wissen, dass passende Zeichenfolgen eine schlechte Idee sind, aber um dies zu vermeiden, können Sie den schön geschriebenen Artikel sehen, den ich zuvor erstellt habe.

Aber ohne String-Matching verwenden wir prepare(for:sender:) , um uns auf den Übergang vorzubereiten. Die fertige Methode sieht ungefähr so aus (die zu unserem ersten View Controller hinzugefügt wird):

Dies hängt nun davon ab, dass wir eine dataSent Eigenschaft im View Controller haben, den wir besuchen.

Wir können dies also in das ziemlich attraktiv benannte SecondViewController , obwohl es sich nur um eine einfache Eigenschaft handelt, die in der View Controller-Klasse platziert ist.

Wie kann man diese am besten zeigen? Ich werde für ein animiertes GIF gehen.

Daten verschieben: Daten über einen Delegaten zurückleiten

Wenn Sie Daten vom zweiten Ansichts-Controller zurück verschieben möchten, möchten wir möglicherweise Daten an den ersten Ansichts-Controller zurückleiten. Eine Möglichkeit hierfür ist die Verwendung von Delegation.

Dazu richten wir einen Delegaten ein

Wir müssen uns dann an den Delegaten aus dem FirstViewController, mit dem wir einfach die Nachricht ausdrucken

Jetzt in SecondViewController fügen wir den Delegaten als Eigenschaft hinzu, die ich dann während der func viewWillDisappear(_ animated: Bool) Jedes Mal, wenn die Ansicht ersetzt wird, wird die Nachricht gesendet

Es gibt ein paar Dinge, also hier ist ein animated gif

Unwind Segue

The unwind segue gives us something rather more.

To traverse from First View Controller to Second View Controller to Third View Controller is a stepwise process. However, an unwind segue gives the ability to move from Third View Controller to First View Controller, skipping the Second View Controller entirely.

entspannen Sie sich segue!

In der FirstViewController muss eine func unwindToFirst(_ unwindSegue: UIStoryboardSegue) Funktion vorhanden sein, die ausgeführt wird, wenn das Storyboard zum FirstViewController .

The storyboard section of this by control — dragging from a button to the top-right hand button „exit“

So difficult to show! Hier ist das animierte GIF

Es ist auch möglich, Daten auf ähnliche Weise wie oben beschrieben durch den Abschnitt zu leiten.

Erstellen Sie Ihren eigenen, benutzerdefinierten Segue

Ein Grund, Ihren eigenen segue zu erstellen, besteht darin, eine schöne Animation zu erstellen, wenn eine Ansicht angezeigt wird.

Meine Animation? Ein Fade Out (repräsentiert unser Verblassen vom Leben, Liebe).

Der von uns erstellte Abschnitt ist ein benutzerdefinierter Abschnitt (anstelle des obigen Show-Abschnitts).

ie Klasse des Segue und legen Sie einen Bezeichner fest. Hier nennen wir es customSegue.

Dies verwendet dann eine ganz neue Datei, um die neueMyCustomSegue Klasse; Ich habe diese Datei eher kreativ MyCustomSegue genannt.swift , das von UIStoryboardSegue erbt.

Die Aktion des Segues wird nun in der Funktion perform with is overridden . override func perform()

Nehmen wir perform() Schritt für Schritt. Um die Kontrolle über den Übergang zu erlangen, setzen wir MyCustomSegue auf transitioningDelegate . An der Spitze der Klasse befindet sich eine beibehaltene Referenz private var selfRetainer: MyCustomerSegue? = nil, die erforderlich ist, da UIKit keine Instanzen von UIStoryboardSegue sodass eine starke Referenz auf dieselbe erstellt wird. Der Präsentationsstil wird auf .fullScreen gesetzt, um den ursprünglichen View Controller zu ersetzen.

Die transitioningDelegate bietet Methoden, die für die Präsentation und Entlassung arbeiten. Wir werden zwei Klassen vorstellen, Presenter und Dismisser um mit denen umzugehen, die sie annehmen UIViewControllerAnimatedTransitioning und NSObject.

Der Presenter ist recht einfach zu schreiben.

Hier haben wir den Moderator des Protokolls mit den Funktionen func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval und func animateTransition(using transitionContext: UIViewControllerContextTransitioning).

Die erstere ist einfach eine Zeit, 1.5 ist eine ziemlich schöne Zeitspanne für diese Fade-Animation.

Der Buchstabe ist die Animation; Die Überblendung erfolgt also für den darstellenden Ansichts-Controller von durchscheinend bis undurchsichtig (dh 0,0 bis 1,0).

Was ist das? Sie wollen einen Spielplatz mit allem, was enthalten? Ich gebe dir das dann:

Besser wird ein ganzes Repo mit der Arbeit daran sein. OK, das ist am Ende dieser Seite.

Fazit

Segues sind nicht so einfach, wie man denkt, aber sie ermöglichen es Ihnen, die Reise des Benutzers durch Ihre App zu animieren und Daten zu übertragen.

Wer würde das nicht wollen?

Ich hoffe, dieser Leitfaden hat Ihnen einen Anstoß in die richtige Richtung für diese (wenn auch unterhaltsame) Art der Übertragung Ihres Benutzers und seiner Daten in einer App gegeben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.