Teraz wracamy do Storyboard, wybieramy ViewControllerC i przeciągamy z kontrolera widoku do Exit proxy.

Przeciągamy do Exit proxy

W popupie wybieramy naszą metodę unwind.

Wybór metody unwind

Na koniec nadajemy naszemu segue unwind identyfikator.

Segment odwijania ma teraz identyfikator i jest połączony z metodą odwijania.

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! 🥂

Unwind segue

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.

Articles

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.