9
votes

Artefact visuel lors du renvoi de plus d'un contrôleur de vue modal à la fois

J'ai du mal à trouver une réponse à cette question. Je construis une pile de modaux via: xxx pré>

Quand je veux renvoyer les modules de NAVA NAVA STRAND> NAVA STRAND> JEUX, j'appelle P>

[[[NavA viewControllers] objectAtIndex:0] dismissViewControllerAnimated:YES completion:NULL];


5 commentaires

J'ai besoin de mieux comprendre ça. Avez-vous 1 uinavigationcontroller qui a 3 contrôleurs de vue, A , b et c , sur la pile ou Avez-vous 3 UINAVIGATIONCONTROLLER S. Chacun présenté avec -PresentViewController: animé: Achèvement:


@JEFFEFFELTHOMAS Le dernier - Navb et NavC sont UINAVIGATIONCONTROLLUX PRÉSENTÉ VIA [CODE> [SOTE PRÉSENTEVIEWCONTROLLER: NAVCONTROLLER ANIMALE: TRUE Achèvement: ^ {}]; Nava est le contrôleur de vue racine.


Utilisez-vous non ou oui pour l'animation lors du renvoi?


@Borisgafurov, j'utilise oui pour l'animation lors du renvoi


Avez-vous essayé non? Vous devriez voir juste votre vue montrer


3 Réponses :


2
votes

Vous pouvez simuler l'animation pour regarder exactement comme vous le souhaitez:

  • pop / licenciement b et c sans Animation
  • Push / présent C Sans Animation
  • pop / licenciement c utilise n'importe quelle animation que vous souhaitez

0 commentaires

4
votes

En réalité, il n'y a aucun moyen de le faire en utilisant simplement DémissonViewControléranimated: Achèvement: Méthode Peu importe où vous le mettez ou comment vous l'appelez (au moins, je ne pouvais pas, si quelqu'un sait un moyen - Nous voulons tous savoir).


Cependant, Il y a un piratage vous pouvez utiliser pour atteindre votre résultat souhaité (ce code doit être appelé de "B" ViewController): xxx


3 commentaires

Faites attention à cette solution. Dans iOS 7, démissionsViewControléranimated: Non ne fait pas de mise en page de manière synchrone et peut s'écraser lorsque vous appelez le 2e renvoi lorsque le contrôleur d'affichage est toujours traité comme une "transition moyenne".


@Johnestropia depuis le premier est sans animation, pensez-vous que cela affectera toujours? Est-il préférable d'ajouter la deuxième ligne à l'intérieur du bloc d'achèvement du premier alors?


Déplacement du deuxième rejet dans la fin de la première achèvement empêchera définitivement ledit problème (bien que la présentationViewController puisse clignoter une fraction de seconde). Je ne sais pas si cela a été corrigé sur iOS 8, mais nous avons eu des problèmes de licenciement enchaînés à l'époque.



3
votes

Si vous utilisez un storyboard, cela devrait être réalisable à l'aide de segus de détente. Mike Woelmer a un Bon ensemble d'articles à ce sujet. Fondamentalement, vous fournissez des informations au storyboard sur la manière dont une vue peut se détendre via plusieurs vues différentes pour obtenir une vue à une vue déjà sur la pile.

Cependant, je suis un peu confus de la même manière que Jeffery Thomas est dans les commentaires: pourquoi présentez-vous un contrôleur de navigation avec un autre contrôleur de navigation? Je peux comprendre que vous voudrez peut-être que la barre de navigation soit différente sur des vues différentes, mais vous pouvez personnaliser que lorsque la vue doit apparaître. Vous devriez réfléchir un peu au contenu des vues dans NAVB et NAVC et vous demander si elles sont censées être présentées comme des vues modales ou si elles seraient mieux à partir d'une seule pile de navigation. En présentant chaque contrôleur de navigation model, vous vous retrouvez avec plusieurs piles de navigation, pas une seule pile avec plusieurs contrôleurs de vue. Même si Juste Navb et NavC faisaient partie de la même pile, il s'agirait probablement d'éliminer le problème visuel que vous voyez.

Si vous utilisez un contrôleur de navigation unique, vous pouvez revenir à un contrôleur d'affichage précédent dans la pile de navigation à l'aide de la méthode -poptoViewController: animé: sur UINAVIGATIONCONTROLLER.

Si vous décidez que la présentation de NAVB et de NAVC Model, comme vous le faites actuellement est la bonne chose à faire, alors vous êtes susceptible d'avoir des problèmes car lorsque vous demandez à NAVA de rejeter son contrôleur d'affichage, il essaiera de rejeter NAVB, qui doit Cela signifie la mise en place d'une transition entre la vue de Navb et la vue de Nava. C'est pourquoi vous voyez cette transition, et non celle que vous souhaitez (qui se situe entre View de Navc et Nava's). Une façon qui pourrait fonctionner (et semble un peu bizarre) est d'essayer de présenter Nava à partir de NAVC, puis remplace la transition pour qu'il ressemble à ce que vous ressemblez à NAVC de la pile. Une fois que vous êtes là, vous pouvez nettoyer les choses en supprimant toutes les fortes références à NAVB et NAVC. Cet article du frêne Furrow vous obtiendra la majeure partie.


4 commentaires

Malheureusement, je n'utilise pas de storyboards. Je présente des contrôleurs de navigation plutôt que d'afficher des contrôleurs en raison de plusieurs branches qui doivent ramener à chaque étape. En tant qu'expérience, j'ai présenté juste l'UIViewControlers à la place et avez fini par la même animation glitchy. Dans ce test, le flux était le suivant [Nava ViewControlers [0] Présent: VCB] -> [VCC actuel VCC] -> [Nava ViewContrôleurs [0] rejeter]


Merci pour votre réponse en passant, cela m'a fait réexaminer le flux d'utilisateurs et j'ai constaté que certaines présentations n'étaient pas effectuées sur le fil principal ailleurs dans l'application. De plus, des contrôleurs de navigation Apple Présentant des contrôleurs de navigation plutôt que de voir les contrôleurs sont également un modèle de document et fournissent un exemple développeur.apple.com/library/ios/faréréArticles/.../a>


Désolé, j'aurais dû être un peu plus clair à ce sujet. Le problème ne se pose pas parce que vous utilisez UINAVIGATIONContrôleurs au lieu d'UIViewControlers (comme vous l'avez testé maintenant). Ce que je disais, c'est que si vous envisageez l'uoinavigationController comme prévu, à savoir gérer une pile de plusieurs contrôleurs d'affichage, la tâche de faire apparaître deux contrôleurs d'affichage à la fois deviendrait trivial parce qu'ils font une partie de la même chose Pile de navigation. Des vues modales imbriquées se comportent de manière assez différente.


J'accepte également entièrement le point sur la présentation des contrôleurs de navigation: il n'y a absolument rien de mal à ce que cela soit logique pour le contenu que vous présentez, je suggérais simplement que cela pourrait avoir besoin de réexaminer. Mais comme cela se produit, il y a un indice dans le lien que vous avez posté de Apple: "Lorsqu'il arrive le temps de rejeter un contrôleur d'affichage présenté, l'approche préférée consiste à laisser le contrôleur de présentation de la présentation le rejeter." Dans votre cas, vous essayez de rejeter NAVC de NAVA, ce qui n'était pas le VC qui le présentait, et c'est la raison sous-jacente pour laquelle votre animation rencontre des problèmes.