Ios 如何将视图控制器弹出到swift中以前的视图控制器之一?

Ios 如何将视图控制器弹出到swift中以前的视图控制器之一?,ios,iphone,swift,Ios,Iphone,Swift,我一直在尝试将视图控制器弹出到视图堆栈中以前的一个视图控制器。假设我的视图堆栈中有第一个VC、第二个VC、第三个DVC和第四个VC视图控制器。当前视图控制器是第四个,在第四个VC中有一个tableview。如果用户删除了tableview中的所有行,我应该引导用户转到secondVC。我有一个想法,我将创建另一个navigationcontroller,并使用presentViewController命令将其呈现。然而,这并不能解决我的问题。因为我认为这种情况下会出现导航问题。我如何才能找到这个

我一直在尝试将视图控制器弹出到视图堆栈中以前的一个视图控制器。假设我的视图堆栈中有第一个VC、第二个VC、第三个DVC和第四个VC视图控制器。当前视图控制器是第四个,在第四个VC中有一个tableview。如果用户删除了tableview中的所有行,我应该引导用户转到secondVC。我有一个想法,我将创建另一个navigationcontroller,并使用presentViewController命令将其呈现。然而,这并不能解决我的问题。因为我认为这种情况下会出现导航问题。我如何才能找到这个案例的最佳解决方案

谢谢你的回答,
致以最诚挚的问候

使用
popToViewController:animated:
而不是执行一般的
popViewControllerAnimated:
调用。您可以检测到用户是否删除了所有行,在这种情况下,执行以下操作(否则只需弹出一个视图控制器):


如果要弹出到特定的视图控件,但不知道返回的计数,可以使用以下方法:

 let viewControllers: [UIViewController] = self.navigationController!.viewControllers as! [UIViewController];

        for aViewController in viewControllers {
            if(aViewController is ViewControllerYouWantToGoTo){
                 self.navigationController!.popToViewController(aViewController, animated: true);
            }
        }

经过大量的努力,我已经在swift 3.0中创建了返回到特定视图控制器的swift扩展

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堆栈中找到控制器,并借助for循环检查所需控制器的条件,如果条件得到满足,它将弹出到目标控制器。

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

如果你使用的是故事板,你可以使用展开序列。我不使用故事板,我使用的是xib文件。有解决办法吗?回答得好@AaronWojnowskiI创建了一个更安全的UIViewController扩展,我还创建了第二个扩展以返回到特定的viewcontroller。对我来说太棒了!我得到了这个崩溃结果:致命错误:在解包的第一行的可选值时意外地发现了nilcode@bluGeni你能给我代码去根视图控制器的主导航控制器,因为我有多个。很好的扩展!但是我不认为施放到
数组
是必要的了,兄弟。谢谢你,这很有帮助。即使使用Swift 5,效果也很好
let viewControllersStack: [UIViewController] = self.navigationController!.viewControllers
      for firstViewcontroller in viewControllersStack
      {
           if firstViewcontroller is desireViewController
           {
                self.navigationController!.popToViewController(firstViewcontroller, animated: true)
           }
      }