Teraz wracamy do Storyboard, wybieramy ViewControllerC i przeciągamy z kontrolera widoku do Exit proxy.
W popupie wybieramy naszą metodę unwind.
Na koniec nadajemy naszemu segue unwind identyfikator.
Teraz pozostało tylko wyzwolić segment odwijania, gdy nasz przycisk zostanie naciśnięty.
@IBAction func backToATapped(_ sender: Any) {
performSegue(withIdentifier: "unwindToA", sender: self)
}
Zrobiliśmy! 🥂
Kilka szczegółów technicznych
Przed zakończeniem tego artykułu chciałbym przyjrzeć się temu, co runtime robi pod maską.
Lokalizacja miejsca docelowego to w zasadzie spacer w górę hierarchii kontrolera widoku. Rodzic bieżącego kontrolera widoku lub prezentującyViewController będzie następny.
Na każdym przystanku, runtime musi również sprawdzić, czy kontroler widoku ma jakieś dzieci, ponieważ metoda rozwijania może być zawarta w jednym z nich. Robi się to przez wywołanie metody allowedChildrenForUnwinding(from:), która zwraca tablicę UIViewControllers, które są dziećmi kontrolera widoku.
Nie chcemy jednak sprawdzać gałęzi, która zawiera źródłowy kontroler widoku, ponieważ właśnie stamtąd przyszliśmy. Unikniemy tego wywołując metodę childContaining(_:), która zwraca kontroler widoku dziecka zawierający źródło segmentu rozwijania. Jest on usuwany z tablicy.
Jeśli zwrócona tablica zawiera jakieś dzieci, powyższy proces jest wykonywany również na nich. Proces kończy się, jeżeli miejsce docelowe zostało znalezione.
Jeżeli zwrócona tablica jest pusta, wywoływana jest metoda canPerformUnwindSegueAction(_:from:sender:), która sprawdza, czy kontroler widoku zawiera metodę unwind.
Jeżeli tak, to osiągnęliśmy miejsce docelowe i proces jest zakończony. Jeśli nie, przechodzimy o jeden krok w górę hierarchii kontrolera widoku i wykonujemy te same czynności.
Podsumowanie
Mam nadzieję, że podobał Ci się ten krótki tutorial dotyczący rozwijania segmentów, dziękuję za poświęcenie czasu na jego przeczytanie.