J'ai une pile de navigation, avec par exemple 5 UIViewControllers. Je veux supprimer les 3e et 4e viewcontrollers de la pile en cliquant sur un bouton dans le 5e viewcontroller. Est-il possible de faire cela? Si c'est le cas, comment?
iphone
ios
uiviewcontroller
uinavigationcontroller
Jean Paul Scott
la source
la source
Vous pouvez d'abord obtenir tous les contrôleurs de vue dans le tableau, puis après avoir vérifié avec la classe de contrôleur de vue correspondante, vous pouvez supprimer celui que vous voulez.
Voici un petit morceau de code:
Je pense que cela facilitera votre travail.
la source
Swift 3 et 4/5
self.navigationController!.viewControllers.removeAll()
self.navigationController?.viewControllers.remove(at: "insert here a number")
Swift 2.1
Enlever tout:
self.navigationController!.viewControllers.removeAll()
supprimer à l'index
self.navigationController?.viewControllers.removeAtIndex("insert here a number")
Il y a un tas d'autres actions possibles comme removeFirst, range etc.
la source
Swift 5:
la source
return !vc.isKind(of: MyViewController.self) && !vc.isKind(of: MyViewController2.self)
ferait le travail en une seule ligne :-)Utiliser la
setViewControllers
fonction deUINavigationController
est la meilleure façon. Il existe également unanimated
paramètre pour activer l'animation.Exemple en swift pour question
J'ai essayé d'autres moyens comme
[tempVC removeFromParentViewController];
. Cela crée un comportement étrange, la navigation de ViewController supprimée s'affiche toujours lorsqu'elle revient comme indiqué par @ robin-ellerkmannla source
setViewControllers(_:animated:)
technique dans les deux sens: pour faire apparaître plusieurs contrôleurs et pousser plusieurs contrôleurs.Swift 2.0:
la source
if var navArray = ... { ... }
Swift 5, Xcode 11.3
J'ai trouvé cette approche simple en spécifiant le ou les contrôleurs de vue que vous souhaitez supprimer de la pile de navigation.
Exemple d'utilisation:
la source
Si vous essayez de vous déplacer vers le 2ème contrôleur de vue à partir du 5ème contrôleur de vue (en sautant les 3ème et 4ème), vous souhaitez utiliser
[self.navigationController popToviewController:secondViewController]
.Vous pouvez obtenir le
secondViewController
depuis la pile du contrôleur de navigation.la source
Utilisez ceci
Il s'occupera des ViewControllers de navigationController. viewControllers et aussi un navigationItems empilés dans navigationBar.
Remarque: assurez-vous de l'appeler au moins après viewDidAppear
la source
Cette solution a fonctionné pour moi dans Swift 4:
votre index de contrôleur de vue actuel dans la pile est:
la source
Swift 5.1, Xcode 11
Assurez-vous d'appeler cette fonction utilitaire après viewDidDisappear () du contrôleur précédent ou viewDidAppear () du nouveau contrôleur
la source
Détails
Solution
Usage
Échantillon complet
Résultat
la source
J'ai écrit une extension avec une méthode qui supprime tous les contrôleurs entre root et top, sauf indication contraire.
}
Si vous souhaitez utiliser range (par exemple: 2 à 5), vous pouvez simplement utiliser
Testé sur iOS 12.2, Swift 5
la source
// suppression des viewcontrollers par noms de classe de la pile puis rejet de la vue actuelle.
la source