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: Lorsqu'il est exécuté, la deuxième vue est présentée, mais La première vue ne rejetera pas. P> p>
5 Réponses :
ESSAYEZ
[self.navigationController popViewControllerAnimated:YES];
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];
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];
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 code> ou similaire au présent
NextQuestionViewController code>, comme suggéré par @mozilla.
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]; }];
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. P>
Pour le code, voir ma réponse à https://stackoverflow.com/a/45579371/218226 P >
Il pourrait être préférable d'utiliser une "SEGUE de dérivation": P>
https://developer.apple.com/library/archive /technotes/tn2298/_index.html P>
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). P>
Disons que vous avez un contrôleur de visualisation root appelé VC1, le premier modal est VC2 et le deuxième modal est VC3. P>
en VC1, vous impliqueriez un Lorsque vous appuyez sur cette touche, le système rejettera tous les contrôleurs d'affichage nécessaires pour vous ramener à VC1. P>
Si fondamentalement, vous ne laissez simplement que tous ces VC empilez, et lorsque vous êtes terminé, vous retirez tout pour revenir à la racine VC. P> ibaction code> appelé (par exemple)
Unwindtoroot code>. Ensuite, dans le storyboard pour VC3, vous faites un câblage de votre bouton DONE à l'objet code> EXIT CODE> et choisissez l'action
Unwindtoroot code> action. P>
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.