如何在swift中将视图控制器popup到以前的视图控制器之一?

我一直在试图将我的视图控制器popup到我的视图堆栈中以前的视图控制器之一。 假设在我的视图栈中有第一个VC,第二个VC,第三个VC和第四个VC视图控制器 。 当前视图控制器是第四个,在第四个VC中有一个tableview。 如果用户删除tableview中的所有行,我应该引导用户到secondVC 。 我有一个想法,我会创build另一个导航控制器 ,并presentViewController命令。 但是,这不是我的问题的解决scheme。 因为我认为这种情况下出现导航问题。 我如何find这个案例的最佳解决scheme?

谢谢你的回答,最好的问候

而不是做一个通用的popViewControllerAnimated:调用,使用popToViewController:animated: 你可以检测用户是否已经删除了所有的行,这样做(否则只是popup一个视图控制器):

 let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController]; self.navigationController!.popToViewController(viewControllers[viewControllers.count - 2], animated: true); 

如果你想popup一个特定的视图控制,并不知道数回去,你可以使用这个:

  let viewControllers: [UIViewController] = self.navigationController!.viewControllers as! [UIViewController]; for aViewController in viewControllers { if(aViewController is ViewControllerYouWantToGoTo){ self.navigationController!.popToViewController(aViewController, animated: true); } } 

经过大量的努力,我创build了swift 3.0中的特定视图控制器的快速扩展。

 extension UINavigationController { func backToViewController(viewController: Swift.AnyClass) { for element in viewControllers as Array { if element.isKind(of: viewController) { self.popToViewController(element, animated: true) break } } } } 

方法调用:

  self.navigationController?.backToViewController(viewController: BarCodeScannerVC.self) 

在这里你可以通过从UINavigationController堆栈find控制器,并在for循环的帮助下检查你想要的控制器的状态,如果条件满足,它将popup到destionation控制器。

 let viewControllersStack: [UIViewController] = self.navigationController!.viewControllers for firstViewcontroller in viewControllersStack { if firstViewcontroller is desireViewController { self.navigationController!.popToViewController(firstViewcontroller, animated: true) } }