23

Qual è la differenza beetween chiamando presentModalViewController e pushViewController, quando:iOS - pushViewController vs presentModalViewController differenza

  • animazione è impostata su NO (anche se sì, questo è solo uno stile di animazione che può essere modificato).
  • un controller di navigazione viene definito nel presentare la vista modale, in modo che possa essere navigabile anche, con uno stack di chiamate, ....

È questo solo per essere in grado di tornare dal primo spinto vista ? Woooaaaaaa .....

Immagino che la differenza sia altrove e più profonda. No ?

risposta

11

La differenza più importante riguarda la semantica. I controllori della vista modale in genere indicano che l'utente deve fornire alcune informazioni o fare qualcosa. Questo legame lo spiega più in profondità: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

Ecco un altro, differenza meno astratto si parla di:

"Quando si presenta un controller di vista modale, il sistema crea una relazione padre-figlio tra il controller della vista che ha fatto il controller di presentazione e visualizzazione che è stato presentato. In particolare, il controller di visualizzazione che ha presentato la proprietà modifica la proprietà modalViewController per puntare al suo controller di visualizzazione (figlio) presentato.Allo stesso modo, il controller di visualizzazione presentato aggiorna la proprietà parentViewController per puntare alla vista controller che lo ha presentato. "

vedi anche questa discussione: why "present modal view controller"?

15

Ignorando transizioni/animazioni e come le cose sono strutturati dietro le quinte (che aleph_null di alswer fornisce una buona discussione), l'unica differenza user-fronte è la possibilità di tornare al vista precedente automaticamente usando la barra di navigazione.

Se si utilizza pushViewController si otterrà automaticamente un pulsante "Indietro" nella barra di navigazione. Se si utilizza presentModalViewController non è necessario, e in genere dovrà implementare i propri controlli e/o callback per gestire l'eliminazione del controller.

Concettualmente lo stile di presentazione modale viene generalmente utilizzato per attività atomiche da cui non è possibile spostarsi (ad esempio, se si completa l'attività o si annulla e non si può fare altro all'interno dell'app fino a quando non si esegue l'una o l'altra) .

Se vi state chiedendo perché hanno la differenza in primo luogo, non posso dire. Personalmente penso che i framework che forniscono un'API unificata per passare da un controller a un altro (come cocos2d o Android) abbiano molto più senso.

+0

Questa è la differenza più importante! –

0

UINavigationController vengono utilizzati quando si desidera avere una sorta di rappresentazione gerarchica dei dati (es. Drill down). Funzionano usando una pila di sottoclassi UIViewController. Ogni volta che "esegui il drill down", aggiungi semplicemente un altro controller di visualizzazione allo stack. Quindi, la logica "indietro" è semplicemente una questione di scoccando i controller di vista da una pila.

È possibile controllare questo link: http://www.icodeblog.com/2011/10/11/back-to-basics-an-introduction-to-view-controllers/

1

Questo è ciò che la mia esperienza dice, se si desidera gestire una gerarchia di punti di vista, meglio andare per pushViewController nel controller di navigazione.Funziona come una pila di controller di visualizzazione nel controller di navigazione. Se tuttavia il requisito è solo quello di mostrare una vista sull'esecuzione di alcune azioni sul controllore della vista genitore, il modo migliore è presentarlo modalmente. Se hai bisogno di una logica push pop complessa, preferisci sempre pushViewController.

1

Date un'occhiata nelle viewControllers nell'immagine

  • I primi 2 viewControllers (Login & presentare) in alto a sinistra sono scollegato dal tabBarController & navigationController
  • Il resto della viewControllers sono incorporati in un NavigationController. In qualche modo appartengono al flusso naturale dell'app.

Ora è necessario chiedersi

Ho bisogno di mostrare sempre login + presentare pagina ogni volta? Sarebbe dolore al collo per l'utente ogni volta andare al login anche se hanno effettuato l'accesso l'ultima volta. Questi 2 schermi davvero non si adattano al flusso naturale degli schermi. Quindi cosa facciamo? Abbiamo appena aggiungerli modale utilizzando presentViewController

Tuttavia, per il resto dei viewControllers vogliamo mantenere al loro interno 2 di navigazione in modo che possiamo facilmente andare avanti e indietro in modo da utilizzare pushViewController

enter image description here

Per ulteriori informazioni Vi consiglio di vedere questo video L'immagine è stata anche presa dalla this ottima risposta. È degno di uno sguardo.

Problemi correlati