如何解除多个ViewController而不是初始的ViewController

时间:2016-05-12 10:03:00

标签: ios objective-c uiviewcontroller

我有这个案子

  • LoginViewController - initial ViewController)现在NavigationControllerB(在NavigationControllerB中我有很多ViewController)
  • NavigationControllerB目前ViewControllerC
  • ViewControllerC目前ViewControllerD

ViewControllerD中,当登录部分过期后,我将返回LoginViewController,因此我想解雇所有ViewControlelr而不是LoginViewController

有什么想法吗? 任何帮助或建议将非常感谢

我尝过这样的方法:当我解雇ViewControllerD成功时,我会向ViewControllerC发送一个阻止,然后我继续关闭ViewControllerC。 在那之后我会解雇NavigationControllerB,但NavigationControllerB有很多ViewController所以我需要写很多block code所以我认为这不是一个好主意

2 个答案:

答案 0 :(得分:2)

如果LoginViewController是您的initialViewController,您可以使用以下代码:

//dismiss all presented view controllers if any
            UIViewController *vc = self.presentingViewController;
            while (vc.presentingViewController) {
                vc = vc.presentingViewController;
            }
            [vc dismissViewControllerAnimated:YES completion:NULL];

答案 1 :(得分:1)

你可以做点什么,

 [[[[[self parentViewController]parentViewController] parentViewController]parentViewController] dismissViewControllerAnimated:YES completion:^{

   // perform task after completion
}];

确保父视图控件的数量。这是根据您的场景解除paraentview控制器的示例。

更新:

尝试这样的事情,

 [self dismissViewControllerAnimated:YES completion:^{

    [[[[[self parentViewController]parentViewController] parentViewController]parentViewController] dismissViewControllerAnimated:YES completion:^{

        // perform task after completion
    }];

}];

更新2:

    [[[[[self parentViewController]parentViewController] parentViewController]parentViewController] dismissViewControllerAnimated:YES completion:^{

    [self dismissViewControllerAnimated:YES completion:nil];
}];

可以执行类似的操作,关闭所有父vc,然后关闭当前的vc 希望这会有所帮助:)