Menemme nyt takaisin Storyboardiin, valitsemme ViewControllerC:n ja vedämme näkymäohjaimesta Exit-proxyn.
Ponnahdusikkunassa valitsemme unwind-metodimme.
Viimeiseksi annamme poistosegueellemme tunnuksen.
Nyt ei ole enää muuta jäljellä kuin unwind segun laukaiseminen, kun painikettamme painetaan.
@IBAction func backToATapped(_ sender: Any) {
performSegue(withIdentifier: "unwindToA", sender: self)
}
Valmis! 🥂
Joitakin teknisiä yksityiskohtia
Ennen tämän artikkelin päättämistä haluan tarkastella, mitä ajoaika tekee konepellin alla.
Kohteen paikantaminen on pohjimmiltaan kävelymatka ylöspäin näkymäohjaimen hallitsijan hierarkiassa. Nykyisen näkymäohjaimen vanhempi eli presentingViewController on seuraava.
Kullakin pysähdyspaikalla runtimen on myös tarkistettava, onko näkymäohjaimella lapsia, koska unwind-metodi saattaa sisältyä johonkin niistä. Tämä tapahtuu kutsumalla allowChildrenForUnwinding(from:)-metodia, joka palauttaa joukon UIViewControllereja, jotka ovat näkymäohjaimen lapsia.
Me emme kuitenkaan halua tarkistaa haaraa, joka sisältää lähteenä olevan näkymäohjaimen, koska tulimme juuri sieltä. Tämä vältetään kutsumalla childContaining(_:)-metodia, joka palauttaa sen lapsinäkökulmaohjaimen, joka sisältää unwind seguen lähteen. Tämä poistetaan matriisista.
Jos palautettu matriisi sisältää lapsia, myös niille suoritetaan edellä mainittu prosessi. Se päättyy, jos määränpää löytyy.
Jos palautettu array on tyhjä, kutsutaan metodia canPerformUnwindSegueAction(_:from:sender:), joka tarkistaa, sisältääkö näkymäohjain unwind-metodin.
Jos sisältää, määränpää on saavutettu ja prosessi on valmis. Jos ei ole, menemme askeleen ylöspäin näkymäohjaimen hierarkiassa ja suoritamme samat vaiheet.
Conclusion
Toivottavasti nautit tästä lyhyestä unwind segues -oppaasta, kiitos kun käytit aikaa sen lukemiseen.