9
votes

Comment présenter une deuxième vue Contentrale et rejeter le premier

Utilisation du code suivant dans la vue parentController, je souhaite présenter une deuxième vue sur l'auteur du premier, puis rejeter le premier: xxx

Lorsqu'il est exécuté, la deuxième vue est présentée, mais La première vue ne rejetera pas.


5 commentaires

PrécédentView est une zone de vue sur une pile de contrôleurs de navigation ou il a été affiché de manière modale?


Oui, il est affiché model. Je ne peux pas comprendre pourquoi il ne rejetera pas.


À partir de votre code, il est indiqué que PresentViewController: Animated, Not PresentModalViewController: animé


À partir de votre code, il est indiqué uniquement PresenceViewController: Animé: Achèvement :, Non PresentModalViewController: animé:. Vérifiez le mot modal au milieu du message. Sauf siEnviewController est une méthode personnalisée, dans ce cas, nous aurions besoin de plus de code.


À partir de votre code, il est indiqué uniquement PresenceViewController: Animé: Achèvement :, Non PresentModalViewController: animé:. Vérifiez le mot modal au milieu du message. Sauf siEnviewController est une méthode personnalisée, dans ce cas, nous aurions besoin de plus de code.


5 Réponses :


5
votes

ESSAYEZ

[self.navigationController popViewControllerAnimated:YES];


2 commentaires

J'essaie de résoudre ce problème à nouveau - l'utilisation de ces deux méthodes ne rejette pas la deuxième vue de vision, après avoir présenté le premier - suis-je en train de manquer quelque chose d'autre?


Comme Raphael le dit, vous devez présenter la deuxième vue de vision comme suit: [PrécédenteView PresentModalViewController: NeuquestionViewController animé: Oui];



12
votes

Vous devriez d'abord rejeter la "View "et présentez ensuite le" NEXTQUESTIONVIEWCONTROLLER ":

// Dismiss the first questionViewController
[previousView dismissViewControllerAnimated:NO completion:nil];

// Animates the next questionViewController using the first questionViewController
[previousView presentViewController:nextQuestionViewController animated:YES completion:nil];


2 commentaires

Suite à cette réponse aborde l'exception suivante: application de terminaison en raison d'une exception non capturée 'NSInvalidargumentException', Raison: «Application a essayé de présenter de manière modale un contrôleur actif . '


Ne pensez-vous pas que ce sera une erreur susceptible d'utiliser un contrôleur d'affichage pour en présenter un autre sachant que cela va être distribué à un moment donné. Je préférerais utiliser [[uiapplication SharedApplication] .keywindow.rootviewcontroller ou similaire au présent NextQuestionViewController , comme suggéré par @mozilla.



2
votes

J'ai fait ensuite (auto - est votre ancien contrôleur):

UIStoryboard *storyboard = self.storyboard;

[self dismissViewControllerAnimated:YES
                         completion:^{
        UIViewController *newController = [storyboard instantiateViewControllerWithIdentifier:@"newControllerStoryboardId"];
        newController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

        [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:newController animated:YES completion:nil];
    }];


0 commentaires

-2
votes

Il semble qu'il ne soit pas possible d'aller de B à C sans montrer de brièvement, ce qui semble peu professionnel. Toutefois, vous pouvez mettre une sous-sous-Sous-Sous-Sous-Sous-Sous-Sous-à-tête jusqu'à ce que vous ayez animé à c.

Pour le code, voir ma réponse à https://stackoverflow.com/a/45579371/218226


0 commentaires

0
votes

Il pourrait être préférable d'utiliser une "SEGUE de dérivation":

https://developer.apple.com/library/archive/careréArticles/viewcontrollerpforiPhoneos/uceSegues.html#//apple_ref/doc/uid/tp40007457-ch15-sw8

https://developer.apple.com/library/archive /technotes/tn2298/_index.html

Il vous permet de renvoyer plusieurs contrôleurs de vue en même temps, sans avoir à savoir combien il y a dans la pile. Et sans le contrôleur d'affichage présenté ayant une connaissance particulière de l'endroit où elle doit naviguer vers (c'est-à-dire que vous n'avez pas à toucher directement au contrôleur de vue root de la fenêtre).

Disons que vous avez un contrôleur de visualisation root appelé VC1, le premier modal est VC2 et le deuxième modal est VC3.

en VC1, vous impliqueriez un ibaction appelé (par exemple) Unwindtoroot . Ensuite, dans le storyboard pour VC3, vous faites un câblage de votre bouton DONE à l'objet EXIT et choisissez l'action Unwindtoroot action.

Lorsque vous appuyez sur cette touche, le système rejettera tous les contrôleurs d'affichage nécessaires pour vous ramener à VC1.

Si fondamentalement, vous ne laissez simplement que tous ces VC empilez, et lorsque vous êtes terminé, vous retirez tout pour revenir à la racine VC.


0 commentaires