在Swift中的Nav Controller中的Pop 2视图控制器
我发现了许多方法来在使用对象C的导航控制器中弹出2个视图控制器,但是当我尝试将它切换到swift时,它似乎不工作。在Swift中的Nav Controller中的Pop 2视图控制器
回到视图控制器的最佳方法是什么? 任何指导,将不胜感激 感谢
扩大对我的评论,发现viewControllers数组中的倒数第二个视图控制器,然后使用popToViewController以避免覆盖整个视图控制器堆栈。
实施例(假定导航控制器具有大于1个的视图控制器):
func backTwo() {
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController]
self.navigationController!.popToViewController(viewControllers[viewControllers.count - 3], animated: true)
}
这工作非常好,谢谢!后续问题:当它弹出到正确的视图控制器时,它首先将横向视图变为纵向,然后弹出。有没有办法让它在弹出之前旋转横向视图? – candidaMan 2014-10-02 16:00:05
哇谢谢亚伦,这工作完美!奇怪的是,我不得不把'viewControllers.count - 3'弹回两个步骤,但现在奇妙地工作! – 2015-02-01 14:57:58
可以动态弹出多个viewcontrollers在(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)
}
}
user5320485答案在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+就绪)
您可以使用这样的:
/// 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)
奖金驳回到特定的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
}
}
}
}
用法:
self.popBack(toControllerType: MyViewController.self)
大同小异作为ObjC:复制'UINavigationController'的'viewControllers'阵列,删除该数组中的最后两个元素,并设置'viewControllers'到修改后的数组。还有一个'setViewControllers(_:animated:)'来包含流行动画。 – fluidsonic 2014-10-01 01:20:30
或者,您可以在'viewControllers'数组中找到第二个视图控制器,然后使用'popToViewController'来避免覆盖整个视图控制器堆栈。 – 2014-10-01 01:24:20
您可以通过他的类弹出到控制器http://stackoverflow.com/questions/30003814/how-can-i-pop-specific-view-controller-in-swift/40314079#40314079 – PabloR 2016-10-28 22:40:26