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

ser*_*sut 21 iphone ios swift

我一直在尝试将视图控制器弹出到视图堆栈中的先前视图控制器之一.假设在我的视图堆栈中有firstVC,secondVC,thirdVC和fourthVC viewcontrollers.当前视图控制器是第四个,并且在第四个VC中有一个tableview.如果用户删除tableview中的所有行,我应该将用户定向secondVC.我有一个想法,我将创建另一个navigationcontroller并使用presentViewController命令呈现它.但是,这不是我的问题的解决方案.因为我认为这种情况会出现导航问题.我怎样才能找到这种情况的最佳解决方案?

谢谢你的回答,祝你好运

Aar*_*ski 32

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

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


Blu*_*eni 16

如果你想弹出特定的视图控件并且不知道要返回的计数你可以使用这个:

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

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


Arv*_*mar 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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

方法调用:

   self.navigationController?.backToViewController(viewController: BarCodeScannerVC.self)
Run Code Online (Sandbox Code Playgroud)