Puis-je pop Spécifiques ViewController?
Je suis en utilisant la navigation en fonction de l'application. Je pousse la Première ViewController à la Deuxième ViewController et de la Deuxième ViewController à la Troisième ViewController. Maintenant, je veux pop de Troisième ViewController à Première ViewController.Je suis de l'exécution de cette tâche à l'aide du code ci-dessous mais mon application s'est écrasé.
S'il vous plaît tout le corps me donner quelques bonnes directives. Je ne peux pas utiliser le protocole pop pour rootViewController parce qu'il est différent viewController. Merci à l'avance...
En Troisième ViewControler j'ai écrit ceci:
FirstViewCtr *x=[[FirstViewCtr alloc] initWithNibName:@"FirstViewCtr" bundle:nil];
[self.navigationController popToViewController:x animated:NO];
InformationsquelleAutor Ankit Vyas | 2010-06-12
Vous devez vous connecter pour publier un commentaire.
Par l'Écriture de la Première Ligne, vous obtenez l'Index de tous les Contrôleurs de Vue et de la deuxième Ligne Vous permettra d'atteindre votre Destination.
Une approche plus sûre:
Swifty façon:
Souvent, il est de plus important à faire que du haut de la pile, afin de:
et vous appelez ça
Swift 4 version
Vous pouvez spécifier un autre filtre sur
.viewControllers.first
selon votre besoin.e.g permet de dire si vous avez mêmekind
de vue des contrôleurs résidant dans la manette de navigation puis vous pouvez spécifier une vérification supplémentaire comme ci-dessousRapide et sûre Swift 3 version:
Votre code crée une nouvelle instance d'un point de vue qui n'a jamais été poussé sur la pile, puis tente de revenir pour ce contrôleur.
Si vous êtes à éclater jusqu'à la racine-vue-contrôleur, vous pouvez utilise
popToRootViewControllerAnimated:
Si vous êtes à éclater de retour sur une distance connue, vous pouvez appeler
popViewControllerAnimated:
plus d'une fois. Dans votre exemple, ce serait 2 contrôleurs à des appels. On pourrait faire la même chose en regardant dansviewControllers
pour le contrôleur 2 à partir de la fin et popping pour elle.Les suggestions ci-dessus sont des solutions rapides. Il est de bonne pratique de scénario serait de passer la commande que vous souhaitez retourner à la le long à chaque contrôleur de vous pousser. Passe d'abord lui-même à la deuxième, la deuxième passe d'une référence à la troisième, la troisième de pop à la référence, qui est la première.
En effet, vous êtes à la création d'un root temporaire contrôleur. Vous pourriez sous-classe
UINavigationController
et ajouter untemporaryRoot
de la propriété et unpopToTemporaryRootViewControllerAnimated:
méthode qui pop à votre root temporaire et la vider. Lors de la première pousse secondes, il serait également définir lui-même comme le root temporaire, de sorte que chaque contrôleur dans la pile de ne pas avoir à passer une référence autour. Vous devez ajouter quelques contrôles supplémentaires de doute vous n'avez jamais pop passé la temporaryRoot sans l'effacer.Après beaucoup d'efforts quelqu'un a créé swift extension de revenir à un point de vue particulier de contrôleur de Swift 3.0.
L'appel de méthode:
Mise en œuvre & Testé en Swift 3.0
Ci-dessous est la Méthode qui est utile pour accéder à une Vue spécifique de Contrôleur :
Utilisation :
Je pense que
.filter({...}).first
est un peu plus lent que.first(where: {...})
.Aussi ce qui pourrait être écrit plus précisément à l'adresse que UIViewControllers.
utilisé ci-dessous de code simple, pour pop de vue spécifique contrôleur;
Fonction de la placer dans
UIViewController
1. il vérifie si les conditions Spécifiques
UIViewController
existe DansUINavigationController
puispopToViewController
ou d'autrepushViewController
Utilisation
j'ai la réponse ici. C'est 100% de travail code pour Swift > 4.X
Comment puis-je faire éclater des Vue-Contrôleur en Swift