我一直在尝试将视图控制器弹出到视图堆栈中以前的视图控制器之一。假设我的视图堆栈中有 firstVC,secondVC,thirdVC和4thVC 视图控制器。当前视图控制器是第四个,并且在第四个VC中有一个tableview。如果用户删除tableview中的所有行,我应该将用户定向到 secondVC 。我有一个想法,我将创建另一个navigationcontroller并使用 presentViewController 命令显示它。但是,这不是我的问题的解决方案。因为我认为这种情况会出现导航问题。我怎样才能找到这种情况的最佳解决方案?
感谢您的回答, 最好的问候
答案 0 :(得分:32)
使用popViewControllerAnimated:
而不是进行通用popToViewController:animated:
调用。您可以检测用户是否已删除所有行,在这种情况下执行此操作(否则只需弹出一个视图控制器):
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController];
self.navigationController!.popToViewController(viewControllers[viewControllers.count - 2], animated: true);
答案 1 :(得分:15)
如果您想要弹出特定的视图控件并且不知道要返回的计数,您可以使用:
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as! [UIViewController];
for aViewController in viewControllers {
if(aViewController is ViewControllerYouWantToGoTo){
self.navigationController!.popToViewController(aViewController, animated: true);
}
}
答案 2 :(得分:7)
经过大量的努力,我在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)
答案 3 :(得分:0)
在这里你可以通过从UINavigationController堆栈中找到控制器并在for循环的帮助下检查你的欲望控制器的条件,如果条件得到满足,它将弹出到destionation控制器。< /强>
let viewControllersStack: [UIViewController] = self.navigationController!.viewControllers
for firstViewcontroller in viewControllersStack
{
if firstViewcontroller is desireViewController
{
self.navigationController!.popToViewController(firstViewcontroller, animated: true)
}
}