2017-08-04 1 views
0

Je travaille sur un projet qui a plusieurs contrôleurs de vue empilés dans un contrôleur de navigation, semblable à ceci:Signification de modales Présentation/Empilement ViewControllers

https://youtu.be/yl2m4fDOLQo

Je crains que je finir par empiler trop beaucoup voient les contrôleurs dans un contrôleur de navigation. Je comprends qu'une fois qu'il y a plus de 3 contrôleurs de vue empilés dans un contrôleur de navigation, les vues sont présentées "modalement"

Tout d'abord, qu'est-ce qu'une présentation "modale"? J'ai cherché dans la documentation de Swift, mais j'ai de la difficulté à comprendre en quoi elle diffère de la pile de navigation. Deuxièmement, s'il y a un problème, y a-t-il un moyen de contourner le problème?

Je suis nouveau à cette sorte d'aide est très appréciée, Nick

Répondre

0

Je comprends qu'une fois il y a plus de 3 contrôleurs de vue empilés dans un contrôleur de navigation, les vues sont présentées « modalement »

Ceci est faux. Vous pouvez avoir autant de contrôleurs de vue dans une pile de navigation que votre application a besoin, tant que le périphérique dispose de suffisamment de mémoire. Les contrôleurs de vue dans une pile de navigation ont une barre de navigation (techniquement, cela fait partie du contrôleur de navigation), un bouton de retour et (espérons-le) un geste de balayage qui permet à l'utilisateur de remonter la pile. Vous ajoutez un contrôleur de vue à la pile en appelant pushViewController(animated:) et enlevez-le en appelant popViewController(animated:) sur le contrôleur de navigation.

Un contrôleur modal existe en dehors de la pile de navigation. Il n'a pas de barre de navigation car il ne se trouve pas dans un contrôleur de navigation. Vous êtes responsable de l'ajout d'un moyen de rejeter le modal, tel que d'appuyer sur un bouton de fermeture placé manuellement dans la vue du contrôleur de vue quelque part. Vous pouvez même ajouter manuellement une occurrence de la barre de navigation et y placer un bouton de fermeture. Vous affichez un modal en appelant le present(_:animated:completion:) sur le contrôleur de vue actuellement affiché et le fermez en appelant le dismiss(_:animated:completion:).