L'appel de popViewControllerAnimated deux fois
J'ai un UINavigationController
avec une série de UIViewControllers
sur elle. Dans certaines circonstances, je veux revenir exactement deux niveaux. Je pensais que je pouvais le faire en appelant popViewControllerAnimated
deux fois dans une rangée, mais il s'avère que la deuxième fois que je l'appelle, c'est de ne pas éclater de rien et au lieu de retourner la valeur NULL. Ai-je besoin de stocker une référence à ma destination VC et appel popToViewControllerAnimated à la place? Je peux le faire, mais il complique mon code car je dois passer le UIViewController
* autour comme je suis poussant VCs sur la pile.
Voici pertinentes de l'extrait:
UIViewController* one = [self.navigationController popViewControllerAnimated:YES];
if (...) {
//pop twice if we were doing XYZ
UIViewController *two = [self.navigationController popViewControllerAnimated:YES];
//stored in "one" and "two" for debugging, "two" is always 0 here.
}
Je fais quelque chose de bizarre ici? Je veux écrire idiomatiques code, donc si la "bonne" façon est d'appeler popToViewControllerAnimated
, ou tout autre chose, je vais joyeusement le changer.
Vous devez vous connecter pour publier un commentaire.
Dans ce cas, vous avez besoin de la pop un viewcontroller dans le navigationController comme suit:
Que le code de la pop à la troisième viewcontroller sur le navigationController de la pile.
Je pense que c'est mieux de compter le nombre de vue de contrôleurs dans la pile que vous et ensuite soustraire le nombre de vue des contrôleurs de vous souhaitez à la pop.
Avec cette solution, vous ne gâcher la pop si vous ajoutez un nouveau point de vue pour votre projet plus tard.
Ça marche pour moi, si vous enregistrez la référence à la
UINavigationViewController
et utiliser les sauvés exemple:Aussi, à ce que vous avez fait de mal, je crois que la raison pour laquelle
[self.navigationController popViewControllerAnimated:YES]
n'est pas en train de travailler la deuxième fois, c'est parce que vous êtes probablement faire de ce deuxième appel sur l'écran qui est sauté sur le premier appel. Après le premier appel, l'affichage actuel est supprimé de la manette de navigation, de sorte que par le temps que vous faites le deuxième appel,self.navigationController
sera de retour nul parce qu'il n'a plus de manette de navigation.