Quelle est la différence entre Modal et Push segue dans les Storyboards?

178

Quelqu'un peut-il m'expliquer quelle est la différence exacte entre modalet pushsegue?

Je sais que lorsque nous utilisons pushla segue est ajoutée à une pile, alors quand nous continuons à l'utiliser, pushelle occupe toujours de la mémoire?

Quelqu'un peut-il me montrer comment ces deux éléments sont mis en œuvre?

Modalles segues peuvent être créés simplement ctrl-clicket en les faisant glisser vers la destination, mais lorsque je fais cela, pushmon application se bloque.

Je pousse d'un bouton à un UINavigationControllerqui a un UIViewController.

Gaurav_soni
la source

Réponses:

174

Un push Segue ajoute un autre VC à la pile de navigation. Cela suppose que le VC qui est à l'origine de l'envoi fait partie du même contrôleur de navigation auquel appartient le VC ajouté à la pile. La gestion de la mémoire n'est pas un problème avec les contrôleurs de navigation et une pile profonde. Tant que vous vous occupez des objets que vous pourriez passer d'un VC à un autre, le runtime s'occupera de la pile de navigation. Voir l'image pour une indication visuelle: NavStack

Un Segue modal est juste un VC présentant un autre VC modal. Les VC n'ont pas besoin de faire partie d'un contrôleur de navigation et le VC présenté de manière modale est généralement considéré comme un "enfant" du VC de présentation (parent). Le VC présenté modalement est généralement sans barre de navigation ou barre d'onglets. Le VC de présentation est également responsable de rejeter le VC modal qu'il a créé et présenté.

J'espère que cela t'aides.

LJ Wilson
la source
1
@EIJay merci pour la bonne explication. Une autre question quand dois-je utiliser le modal et quand utiliser le push segue?
Gaurav_soni
43
En règle générale, lorsque vous souhaitez afficher une vue détaillée d'une vue récapitulative, utilisez un contrôleur de navigation et Push Segues. Si la vue "parent" ne se rapporte pas vraiment en ce qui concerne les données à la vue "enfant", alors utilisez un modal. Un bon exemple de vue modale serait une vue de connexion. La vue de connexion n'a pas vraiment de relation en ce qui concerne les données avec la vue "parent".
LJ Wilson
5
@TJ Oui, vous pouvez créer des "chaînes de modèles". Ignorer un VC en bas de la chaîne rejette tous les VC en haut de la chaîne - l'utilisateur ne voit que le VC supérieur ignorer (lorsque vous activez l'animation). C'est comme les contrôleurs de navigation.
Constantino Tsarouhas
3
@jchatard Oui. Tant que votre segue est modale, dans le storyboard, vous verrez que la barre de navigation n'est pas héritée. Alors cliquez simplement sur le premier VC de la chaîne modale que vous avez, puis cliquez sur le menu Editeur -> Incorporer dans -> Contrôleur de navigation. Cela vous définira un contrôleur de navigation qui sera commun à toute votre chaîne modale. Non pas qu'à ce moment, seule la séquence d'affichage du contrôleur de navigation soit "modale", alors que toutes les séquences à l'intérieur de votre chaîne modale doivent être des séquences "push".
HpTerm
3
Push ne peut être utilisé que SI le VC à partir duquel vous effectuez la transition utilise un contrôleur de navigation. Essayez de pousser à partir d'un VC qui n'est pas intégré dans un contrôleur de navigation et il lèvera une exception. Donc, cela n'a vraiment rien à voir avec la façon dont les données sont étroitement connectées entre le parent et l'enfant, il s'agit simplement de savoir si vous utilisez un contrôleur de navigation pour gérer vos VC. Vous pouvez faire exactement la même chose manuellement en utilisant des segues en utilisant des transitions modales.
smileBot
22

Mise à jour de Swift 3.0 et XCode 8.2.1

1. Appuyez sur Segue

Push segue a été renommé Show segue. Pour créer un push segue, le contrôleur de vue parent doit être intégré au contrôleur de navigation. Le contrôleur de navigation fournit une barre de navigation. Une fois que vous connectez deux contrôleurs de vue avec push segue, le contrôleur de vue enfant aura automatiquement une barre de navigation en haut. Le contrôleur de vue enfant sera ajouté au-dessus de la pile de navigation.

entrez la description de l'image ici

Push segue fournit également des fonctionnalités par défaut. Le contrôleur de vue enfant aura un bouton de retour qui vous ramènera au contrôleur de vue parent. Vous pouvez également balayer vers la droite pour faire apparaître le contrôleur de vue enfant. L'animation pour push segue est comme faire glisser des pages horizontalement.

entrez la description de l'image ici

Bien que vous soyez autorisé à effectuer un push segue à partir d'un contrôleur de vue qui n'est pas dans un contrôleur de navigation, vous perdrez toutes les fonctionnalités telles que la barre de navigation, l'animation, les gestes, etc. lorsque vous le faites. Dans ce cas, vous devez d'abord intégrer votre contrôleur de vue parent dans le contrôleur de vue de navigation, puis effectuer une transition vers les contrôleurs de vue enfants.

entrez la description de l'image ici

2. Modal Segue

Un segment modal (c'est-à-dire présent de façon modale), d'autre part, se présente sur le contrôleur de vue actuel. Le contrôleur de vue enfant n'héritera pas du contrôleur de vue de navigation, de sorte que la barre de navigation sera perdue si vous présentez une séquence modale à partir d'un contrôleur de vue avec contrôleur de vue de navigation. Vous devez à nouveau incorporer le contrôleur de vue enfant dans le contrôleur de navigation et démarrer une toute nouvelle pile de navigation si vous le souhaitez. Si vous souhaitez revenir au contrôleur de vue parent, vous devez l'implémenter vous-même et appeler à dismisspartir du code.

entrez la description de l'image ici

L'animation pour la séquence modale est que le contrôleur de vue enfant apparaîtra du bas de la page. Le contrôleur de vue de navigation a également disparu dans cette démo

entrez la description de l'image ici

Fangming
la source
6

La vue push doit être intégrée dans un fichier navigationController.

Cliquez sur votre master view, puis dans la barre de menu choisissez:

EDITOR->embed in->navigationController
Simone Pistecchia
la source
Faux, pushViewpeut également être construit SANS navigationControlleret cette réponse est incomplète!
Daksh Gargas
1

Il s'agit de pousser les contrôles à l'aide de méthodes personnalisées push et segue pour le storyboard Story Board

Et Modal est un moyen de naviguer dans les vues sans utiliser de storyboards.

Pushkraj
la source
Comment créer une séquence modale sans utiliser de storyboards?
jianpx
@jianpx: Vous ne pouvez effectuer une transition que lorsque vous utilisez des storyboards. Sinon, vous pouvez utiliser le contrôleur de navigation ou PresentModalViewController pour basculer entre les vues.
Pushkraj
@ Pushkraj merci. Voulez-vous dire qu'il n'y a aucun moyen de créer une segue par code?
jianpx
@jianpx: Pas nécessaire. Segue n'est nécessaire que lors de l'utilisation de storyboards.
Pushkraj