Ho scritto un'estensione UIViewController (Swift 3+ pronti)
si potrebbe usare in questo modo:
/// pop back n viewcontroller
func popBack(_ nb: Int) {
if let viewControllers: [UIViewController] = self.navigationController?.viewControllers {
guard viewControllers.count < nb else {
self.navigationController?.popToViewController(viewControllers[viewControllers.count - nb], animated: true)
return
}
}
}
Usage:
self.popBack(3)
Bonus respingere a uno specifico viewcontroller
/// pop back to specific viewcontroller
func popBack<T: UIViewController>(toControllerType: T.Type) {
if var viewControllers: [UIViewController] = self.navigationController?.viewControllers {
viewControllers = viewControllers.reversed()
for currentViewController in viewControllers {
if currentViewController .isKind(of: toControllerType) {
self.navigationController?.popToViewController(currentViewController, animated: true)
break
}
}
}
}
Usage:
self.popBack(toControllerType: MyViewController.self)
Molto lo stesso come in objC: copiare il '' matrice viewControllers' di UINavigationController', eliminarne le ultime due elementi di questo array e impostare 'viewControllers' alla matrice modificata. C'è anche un 'setViewControllers (_: animated:)' per includere l'animazione pop. – fluidsonic
In alternativa è possibile trovare il penultimo controller della vista nell'array 'viewControllers' e quindi usare' popToViewController' per evitare di sovrascrivere l'intero stack del controller di visualizzazione. –
È possibile accedere a un controller dalla sua classe http://stackoverflow.com/questions/30003814/how-can-i-pop-specific-view-controller-in-swift/40314079#40314079 – PabloR