Nyní se vrátíme do Storyboardu, vybereme ViewControllerC a přetáhneme z kontroléru pohledu na proxy Exit.

Přetáhneme na proxy Exit

V okně vybereme naši metodu unwind.

Výběr metody odvíjení

Nakonec dáme našemu odvíjecímu segmentu identifikátor.

Segue unwind má nyní identifikátor a je připojen k metodě unwind.

Teď už zbývá jen spustit segue unwind při stisknutí našeho tlačítka.

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

Máme hotovo! 🥂

Unwind segue

Několik technických detailů

Před uzavřením tohoto článku se chci podívat na to, co dělá runtime pod kapotou.

Lokalizace cíle je v podstatě procházka hierarchií řadiče zobrazení. Dalším cílem bude rodič aktuálního řadiče zobrazení neboli prezentujícíViewController.

Při každém zastavení musí runtime také zkontrolovat, zda má řadič zobrazení nějaké potomky, protože metoda odvíjení může být obsažena v některém z nich. To se provádí voláním metody allowedChildrenForUnwinding(from:), která vrací pole UIViewControllerů, které jsou potomky view controlleru.

Nechceme však kontrolovat větev, která obsahuje zdrojový view controller, protože jsme z ní právě vyšli. Tomu se vyhneme voláním metody childContaining(_:), která vrátí podřízený view controller, který obsahuje zdroj rozbalovacího segmentu. Ten je z pole odstraněn.

Pokud vrácené pole obsahuje nějaké potomky, výše uvedený postup se provede i na nich. Skončí, pokud je nalezen cíl.

Jestliže je vrácené pole prázdné, zavolá se metoda canPerformUnwindSegueAction(_:from:sender:), která zkontroluje, zda řadič zobrazení obsahuje metodu unwind.

Jestliže ano, dosáhli jsme cíle a proces je ukončen. Pokud tomu tak není, přejdeme o krok výše v hierarchii řadičů zobrazení a provedeme stejné kroky.

Závěr

Doufám, že se vám tento krátký návod na odvíjení segmentů líbil, děkuji, že jste si našli čas na jeho přečtení.

Articles

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.