Most visszamegyünk a Storyboardra, kiválasztjuk a ViewControllerC-t, és a nézetvezérlőből áthúzzuk a Kilépési proxyra.
A felugró ablakban kiválasztjuk az unwind módszerünket.
Végül adjunk azonosítót a feloldási segédünknek.
Már csak annyi van hátra, hogy a gombunk megnyomásakor elindítsuk az unwind segue-t.
@IBAction func backToATapped(_ sender: Any) {
performSegue(withIdentifier: "unwindToA", sender: self)
}
Készen vagyunk! 🥂
Néhány technikai részlet
A cikk lezárása előtt szeretném megnézni, mit csinál a futásidő a motorháztető alatt.
A célállomás megtalálása alapvetően egy séta a nézetvezérlő hierarchiában. Az aktuális nézetvezérlő szülője vagy bemutatóViewController lesz a következő.
A futásidőnek minden egyes megállásnál azt is ellenőriznie kell, hogy a nézetvezérlőnek vannak-e gyermekei, mert a feloldási metódus ezek egyikében lehet, hogy benne van. Ez az allowedChildrenForUnwinding(from:) metódus meghívásával történik, amely visszaadja azon UIViewControllerek tömbjét, amelyek a nézetvezérlő gyermekei.
Az ágat azonban, amely a forrás nézetvezérlőt tartalmazza, nem akarjuk ellenőrizni, hiszen éppen onnan jöttünk. Ezt elkerülhetjük a childContaining(_:) metódus meghívásával, amely visszaadja azt a gyermek nézetvezérlőt, amely tartalmazza a feloldási segue forrását. Ezt eltávolítjuk a tömbből.
Ha a visszaadott tömb tartalmaz gyermekeket, a fenti folyamatot azokon is elvégezzük. Ez akkor ér véget, ha megtaláltuk a célt.
Ha a visszaadott tömb üres, akkor a canPerformUnwindSegueAction(_:from:sender:) metódust hívjuk meg, amely ellenőrzi, hogy a nézetvezérlő tartalmazza-e az unwind metódust.
Ha igen, akkor elértük a célt és a folyamat befejeződött. Ha nem, akkor egy lépéssel feljebb megyünk a nézetvezérlő hierarchiában, és ugyanazokat a lépéseket hajtjuk végre.
Következtetés
Remélem, tetszett ez a rövid bemutató az unwind seguesről, köszönjük, hogy időt szánt az elolvasására.