在Swift中的导航控制器中popup2个视图控制器

我已经find了很多方法来回弹使用对象C的导航控制器中的2个视图控制器,但是当我尝试并切换到快速它似乎并没有工作。

什么是最好的方法回弹查看控制器? 任何指导将不胜感激

展开我的评论,findviewControllers数组中的第二个视图控制器,然后使用popToViewController避免覆盖整个视图控制器堆栈。

示例(假定导航控制器具有多个视图控制器):

 func backTwo() { let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController] self.navigationController!.popToViewController(viewControllers[viewControllers.count - 3], animated: true) } 

你可以dynamicpopup多个视图控制器(swift 2.0)

 let allViewController: [UIViewController] = self.navigationController!.viewControllers as [UIViewController]; for aviewcontroller : UIViewController in allViewController { if aviewcontroller .isKindOfClass(YourDestinationViewControllerName) { self.navigationController?.popToViewController(aviewcontroller, animated: true) } } 

用户5320485在swift3中回答

 let viewControllers = self.navigationController!.viewControllers as [UIViewController]; for aViewController:UIViewController in viewControllers { if aViewController.isKind(of: AdCreateViewController.self) { _ = self.navigationController?.popToViewController(aViewController, animated: true) } } 

我写了一个UIViewController扩展(Swift 3+ ready)

你可以这样使用:

 /// 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 } } } 

用法:

 self.popBack(3) 

奖金closures特定的视图控制器

 /// 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 } } } } 

用法:

 self.popBack(toControllerType: MyViewController.self)