Nu går vi tilbage til Storyboardet, vælger ViewControllerC og trækker fra viewcontrolleren til Exit-proxyen.

Træk til Exit-proxy

I popuppen vælger vi vores unwind-metode.

Valg af afviklingsmetode

Slutteligt giver vi vores afviklings segue en identifikator.

Unwind-seguen har nu en identifikator og er forbundet til unwind-metoden.

Nu mangler vi bare at udløse unwind-seguen, når der trykkes på vores knap.

@IBAction func backToATapped(_ sender: Any) {
performSegue(withIdentifier: "unwindToA", sender: self)
}

Vi er færdige! 🥂

Unwind segue

Nogle tekniske detaljer

Hvor vi afslutter denne artikel, vil jeg gerne se på, hvad runtime gør under motorhjelmen.

Lokalisering af destinationen er grundlæggende en tur op i view controller-hierarkiet. Den aktuelle visningscontrollers forælder eller presentingViewController vil være den næste.

På hvert stop skal køretiden også kontrollere, om visningscontrolleren har nogen børn, fordi afviklingsmetoden kan være indeholdt i en af disse. Dette gøres ved at kalde metoden allowedChildrenForUnwinding(from:), som returnerer et array af UIViewControllers, som er viewcontrollerens børn.

Men vi ønsker dog ikke at kontrollere den gren, der indeholder kildeviewcontrolleren, da vi lige er kommet derfra. Det undgås ved at kalde metoden childContaining(_:), som returnerer den underordnede visningscontroller, der indeholder kilden til afviklingsseguen. Denne fjernes fra arrayet.

Hvis det returnerede array indeholder nogen børn, udføres ovenstående proces også på dem. Den afsluttes, hvis destinationen er fundet.

Hvis det returnerede array er tomt, kaldes metoden canPerformUnwindSegueAction(_:from:sender:), som kontrollerer, om visningscontrolleren indeholder afviklingsmetoden.

Hvis den gør, har vi nået vores destination, og processen er afsluttet. Hvis den ikke gør, går vi et trin op i visionscontroller-hierarkiet og udfører de samme trin.

Slutning

Jeg håber, at du nød denne korte tutorial om unwind-segues, tak fordi du tog dig tid til at læse den.

Articles

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.