Nu går vi tillbaka till Storyboard, markerar ViewControllerC och drar från View Controller till Exit-proxy.

Släpp till Exit proxy

I popup-fönstret väljer vi vår unwind-metod.

Välja avvecklingsmetod

Slutligt ger vi vår avvecklingssegue en identifierare.

Unwind segue har nu en identifierare och är kopplad till unwind-metoden.

Nu återstår bara att trigga unwind segue när vår knapp trycks ner.

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

Vi är klara! 🥂

Unwind segue

En del tekniska detaljer

För att avsluta den här artikeln vill jag titta på vad körtiden gör under huven.

Lokalisering av destinationen är i princip en vandring uppåt i View Controller-hierarkin. Den aktuella vykontrollantens förälder eller presentingViewController blir nästa.

Vid varje stopp måste körtiden också kontrollera om vykontrollanten har några barn eftersom avvecklingsmetoden kan finnas i ett av dessa. Detta görs genom att anropa metoden allowedChildrenForUnwinding(from:), som returnerar en array av UIViewControllers som är visningskontrollantens barn.

Vi vill dock inte kontrollera den gren som innehåller källvisningskontrollanten, eftersom vi just kom därifrån. Det undviks genom att anropa metoden childContaining(_:), som returnerar den underordnade visningskontrollant som innehåller källan till avvecklingsseggen. Denna tas bort från arrayen.

Om arrayen som returneras innehåller några barn utförs ovanstående process även på dem. Den avslutas om destinationen hittas.

Om arrayet som returneras är tomt anropas metoden canPerformUnwindSegueAction(_:from:sender:), som kontrollerar om visningskontrollanten innehåller avvecklingsmetoden.

Om den gör det har vi nått vår destination och processen är avslutad. Om den inte gör det, går vi ett steg uppåt i vykontrollanthierarkin och utför samma steg.

Slutsats

Jag hoppas att du gillade den här korta handledningen om att avveckla segment, tack för att du tog dig tid att läsa den.

Articles

Lämna ett svar

Din e-postadress kommer inte publiceras.