在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)