Qual è la differenza tra Modal e Push segue negli Storyboard?


178

Qualcuno può spiegarmi qual è la differenza esatta tra modale pushsegue?

So che quando usiamo pushil seguito viene aggiunto a uno stack, quindi quando continuiamo a usarlo pushcontinua a occupare memoria?

Qualcuno può mostrarmi come sono implementati questi due?

Modali segues possono essere creati semplicemente ctrl-clicke trascinandoli a destinazione ma quando lo faccio con la pushmia app si blocca.

Sto spingendo da un pulsante a un UINavigationControllerche ha un UIViewController.

Risposte:


174

Un push Segue sta aggiungendo un altro VC allo stack di navigazione. Ciò presuppone che VC che origina il push faccia parte dello stesso controller di navigazione a cui appartiene il VC che viene aggiunto allo stack. La gestione della memoria non è un problema con i controller di navigazione e uno stack profondo. Finché ti prendi cura degli oggetti che potresti passare da un VC all'altro, il runtime si occuperà dello stack di navigazione. Vedi l'immagine per un'indicazione visiva: NavStack

Un Segue modale è solo un VC che presenta un altro VC in modo modale. I VC non devono far parte di un controller di navigazione e il VC presentato in modo modale è generalmente considerato un "figlio" del VC (genitore) presentante. Il VC presentato in modo modale di solito è privo di qualsiasi barra di navigazione o barra delle schede. Il VC di presentazione è anche responsabile del licenziamento del VC modale che ha creato e presentato.

Spero che questo ti aiuti.


1
@EIJay grazie per l'ottima spiegazione. Segue un'altra domanda quando devo usare il modale e quando usare il push?
Gaurav_soni,

43
In genere, quando si desidera mostrare una vista di dettaglio di una vista di riepilogo, utilizzare un controller di navigazione e Push Segues. Se la vista "padre" non è realmente correlata per quanto riguarda i dati alla vista "figlio", utilizzare un modale. Un buon esempio per una vista modale potrebbe essere una vista di accesso. La vista Login non ha alcuna relazione per quanto riguarda i dati con la vista "padre".
LJ Wilson,

5
@TJ Sì, è possibile creare "catene di modelli". Ignorare un VC lungo la catena elimina tutti i VC lungo la catena: l'utente vede solo il massimo VC (quando si abilita l'animazione). È come i controller di navigazione.
Constantino Tsarouhas,

3
@jchatard Sì. Finché il tuo seguito è modale, nello storyboard vedrai che la barra di navigazione non è ereditata. Quindi fai semplicemente clic sul primo VC della catena modale che hai e quindi fai clic sul menu Editor -> Incorpora in -> Controller di navigazione. Questo ti imposterà un controller di navigazione che sarà comune a tutta la tua catena modale. Non che in quel momento solo il seguito per la visualizzazione del controller di navigazione sia "modale", mentre tutti i segues all'interno della tua catena modale devono essere "push" segues.
HpTerm,

3
Push può essere utilizzato solo se il VC da cui stai seguendo utilizza un controller di navigazione. Prova a spingere da un VC che non è incorporato in un controller di navigazione e genererà un'eccezione. Quindi, questo non ha davvero nulla a che fare con la stretta connessione dei dati tra genitore e figlio, ha a che fare semplicemente con il fatto che stai usando un controller di navigazione per gestire i tuoi VC. Puoi fare esattamente la stessa cosa manualmente usando i follower usando le transizioni modali.
smileBot,

22

Aggiornamento di Swift 3.0 e XCode 8.2.1

1. Premere Segue

Push segue è stato rinominato Show segue. Per creare il push segue, il controller della vista padre deve essere incorporato nel controller di navigazione. Il controller di navigazione fornisce la barra di navigazione. Dopo aver collegato due controller di visualizzazione con push segue, il controller di visualizzazione figlio avrà automaticamente la barra di navigazione in alto. Il controller di visualizzazione figlio verrà aggiunto in cima allo stack di navigazione.

inserisci qui la descrizione dell'immagine

Push segue offre anche funzionalità predefinite. Il controller della vista figlio avrà un pulsante Indietro che ti riporta al controller della vista padre. Puoi anche scorrere verso destra per far apparire il controller di visualizzazione figlio. L'animazione per push segue è come far scorrere le pagine in orizzontale.

inserisci qui la descrizione dell'immagine

Mentre ti è permesso fare una spinta segue da un controller di visualizzazione che non si trova in un controller di navigazione, perderai tutte le funzionalità come la barra di navigazione, l'animazione, i gesti ecc. Quando lo fai. In questo caso, è necessario incorporare prima il controller della vista padre all'interno del controller della vista di navigazione, quindi fare in modo che il push segua i controller della vista figlio.

inserisci qui la descrizione dell'immagine

2. Segue modale

Un seguito modale (cioè presente modalmente), d'altra parte, si presenta al controller di vista corrente. Il controller di visualizzazione figlio non erediterà il controller di visualizzazione di navigazione, quindi la barra di navigazione andrà persa se si presenta segue modale da un controller di visualizzazione con controller di visualizzazione di navigazione. È necessario incorporare nuovamente il controller di visualizzazione figlio nel controller di navigazione e avviare un nuovo stack di navigazione se lo si desidera. Se vuoi tornare al controller della vista padre, devi implementarlo da solo e chiamare dismissdal codice.

inserisci qui la descrizione dell'immagine

L'animazione per segue modale è che il controller di visualizzazione figlio verrà visualizzato dalla parte inferiore della pagina. Anche il controller della vista di navigazione è andato in questa demo

inserisci qui la descrizione dell'immagine


6

La vista push deve essere costruita in a navigationController.

Fai clic su master view, quindi nella barra dei menu scegli:

EDITOR->embed in->navigationController

Sbagliato, pushViewpuò anche essere costruito SENZA navigationControllere questa risposta è incompleta!
Daksh Gargas,

1

Questo sta spingendo i controlli usando i metodi push e segue personalizzati per lo storyboard Story Board

E Modal è il modo di navigare attraverso le viste senza usare Storyboard.


Come creare segue modale senza usare gli storyboard?
jianpx,

@jianpx: puoi seguire solo quando usi gli storyboard. Altrimenti è possibile utilizzare il controller di navigazione o PresentModalViewController per passare da una vista all'altra.
Pushkraj,

@ Pushkraj grazie. Quindi vuoi dire che non c'è modo di creare segue per codice?
jianpx,

@jianpx: non necessario. Segue necessario solo quando si utilizzano gli storyboard.
Pushkraj,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.