Jaka jest różnica między segregacją modalną i push w scenorysach?

178

Czy ktoś może mi wyjaśnić, jaka jest dokładna różnica między modali pushsegregować?

Wiem, że kiedy korzystamy pushz segue, dodaje się go do stosu, więc kiedy pushgo używamy , wciąż zajmuje pamięć?

Czy ktoś może mi pokazać, jak te dwa są realizowane?

Modalsegues można utworzyć, po prostu ctrl-clickprzeciągając do miejsca docelowego, ale kiedy to robię z pushmoją aplikacją ulega awarii.

Naciskam z przycisku do, UINavigationControllerktóry ma UIViewController.

Gaurav_soni
źródło

Odpowiedzi:

174

Push Segue jest dodanie kolejnego VC do stosu nawigacji. Zakłada się, że VC, który inicjuje wypychanie, jest częścią tego samego kontrolera nawigacyjnego, do którego należy VC dodawany do stosu. Zarządzanie pamięcią nie stanowi problemu w przypadku kontrolerów nawigacyjnych i głębokiego stosu. Tak długo, jak zajmujesz się obiektami, które możesz przekazywać z jednego VC do drugiego, środowisko wykonawcze zajmie się stosem nawigacji. Zobacz obraz dla wizualnego wskazania: NavStack

Modalne Segue jest tylko jeden VC prezentuje kolejną VC modally. VC nie muszą być częścią kontrolera nawigacyjnego, a VC prezentowane modalnie jest ogólnie uważane za „dziecko” prezentującego (macierzystego) VC. Modalnie prezentowane VC zwykle nie obejmuje żadnych pasków nawigacyjnych ani pasków tabulatorów. Prezentujący VC odpowiada również za odrzucenie utworzonego i przedstawionego przez siebie modalnego VC.

Mam nadzieję że to pomoże.

LJ Wilson
źródło
1
@EIJay dzięki za świetne wyjaśnienie. Jeszcze jedno pytanie, kiedy muszę użyć modalu, a kiedy użyć push segue?
Gaurav_soni
43
Zasadniczo, jeśli chcesz wyświetlić widok szczegółów widoku podsumowania, użyj kontrolera nawigacyjnego i Push Segues. Jeśli widok „nadrzędny” tak naprawdę nie odnosi się do danych w widoku „podrzędny”, użyj modalu. Dobrym przykładem widoku modalnego byłby widok logowania. Widok logowania tak naprawdę nie ma żadnego związku w zakresie danych z widokiem „nadrzędnym”.
LJ Wilson
5
@TJ Tak, możesz tworzyć „łańcuchy modeli”. Odrzucenie VC w dół łańcucha zwalnia wszystkie VC w górę łańcucha - użytkownik widzi tylko najwyższe odrzucenie VC (po włączeniu animacji). To jest jak kontrolery nawigacyjne.
Constantino Tsarouhas,
3
@jchatard Tak. Tak długo, jak segue jest modalny, w scenorysie zobaczysz, że pasek nawigacyjny nie jest dziedziczony. Więc po prostu kliknij pierwszy VC łańcucha modalnego, który masz, a następnie kliknij menu Edytor -> Osadź w -> Kontroler nawigacji. Spowoduje to ustawienie kontrolera nawigacyjnego, który będzie wspólny dla całego łańcucha modalnego. Nie znaczy to, że w tym momencie tylko segment wyświetlania kontrolera nawigacji jest „modalny”, podczas gdy wszystkie sekwencje w twoim łańcuchu modalnym muszą być sekwencjami „push”.
HpTerm
3
Push może być użyty tylko wtedy, gdy VC, od którego segregujesz, używa kontrolera nawigacyjnego. Spróbuj wypchnąć z VC, który nie jest osadzony w kontrolerze nawigacyjnym, a wygeneruje wyjątek. Tak naprawdę nie ma to nic wspólnego z tym, jak ściśle dane są łączone między rodzicem a dzieckiem, chodzi tylko o to, czy używasz kontrolera nawigacyjnego do zarządzania VC. Możesz zrobić dokładnie to samo ręcznie, używając sekwencji przy użyciu przejść modalnych.
smileBot 24.09.13
22

Aktualizacja Swift 3.0 i XCode 8.2.1

1. Naciśnij Segue

Nazwa push segue została zmieniona na Show segue. Aby utworzyć segment push, nadrzędny kontroler widoku musi być osadzony w kontrolerze nawigacyjnym. Kontroler nawigacyjny udostępnia pasek nawigacji. Po podłączeniu dwóch kontrolerów widoku z funkcją push segue kontroler widoku potomnego automatycznie wyświetli pasek nawigacji u góry. Kontroler widoku potomnego zostanie dodany na górze stosu nawigacji.

wprowadź opis zdjęcia tutaj

Push segue zapewnia również funkcje domyślne. Kontroler widoku potomnego będzie miał przycisk Wstecz, który umożliwia powrót do kontrolera widoku nadrzędnego. Możesz także przesunąć palcem w prawo, aby otworzyć kontroler widoku potomnego. Animacja dla push segue przypomina przesuwanie stron w poziomie.

wprowadź opis zdjęcia tutaj

Chociaż możesz utworzyć segregację wypychania z kontrolera widoku, który nie znajduje się w kontrolerze nawigacyjnym, stracisz wszystkie funkcje, takie jak pasek nawigacji, animacja, gest itp. W takim przypadku należy najpierw osadzić nadrzędny kontroler widoku w kontrolerze nawigacyjnym, a następnie ustawić wypychanie na kontrolery widoku podrzędnego.

wprowadź opis zdjęcia tutaj

2. Segment modalny

Z drugiej strony, segment modalny (tj. Obecny modalnie) prezentuje się nad bieżącym kontrolerem widoku. Kontroler widoku potomnego nie odziedziczy kontrolera widoku nawigacji, więc pasek nawigacji zostanie utracony, jeśli zaprezentujesz segregację modalną z kontrolera widoku z kontrolerem widoku nawigacji. Musisz ponownie osadzić kontroler widoku potomnego w kontrolerze nawigacyjnym i uruchomić nowy stos nawigacji, jeśli chcesz go z powrotem. Jeśli chcesz wrócić do nadrzędnego kontrolera widoku, musisz to zaimplementować samodzielnie i zadzwonić dismissz kodu.

wprowadź opis zdjęcia tutaj

Animacja dla segmentu modalnego polega na tym, że kontroler widoku potomnego pojawi się u dołu strony. W tym demo zniknął również kontroler widoku nawigacji

wprowadź opis zdjęcia tutaj

Fangming
źródło
6

Widok push musi być wbudowany w navigationController.

Kliknij swój master view, a następnie na pasku menu wybierz:

EDITOR->embed in->navigationController
Simone Pistecchia
źródło
Źle, pushViewmożna go również zbudować BEZ, navigationControllera ta odpowiedź jest niepełna!
Daksh Gargas
1

Jest to wypychanie elementów sterujących za pomocą niestandardowych metod wypychania i segregowania w serii ujęć Plansza

A Modal to sposób poruszania się po widokach bez użycia Storyboardów.

Pushkraj
źródło
Jak stworzyć segregację modalną bez użycia scenariuszy?
jianpx
@jianpx: Możesz segregować tylko podczas korzystania ze scenariuszy. W przeciwnym razie możesz użyć kontrolera nawigacji lub PresentModalViewController do przełączania widoków.
Pushkraj
@ Pushkraj dzięki. Czy masz na myśli, że nie ma możliwości utworzenia segue według kodu?
jianpx
@jianpx: Nie potrzebne. Segment jest potrzebny tylko podczas używania scenariuszy.
Pushkraj,