一次性关闭视图控制器

问题描述:

我需要一直回到呈现第一个导航控制器的视图控制器。但是,我并没有立即解雇多个控制器,而当我尝试这样做时,它不起作用。它只是前往第一个导航控制器,而不是前一个导航控制器。一次性关闭视图控制器

这里是我当前的代码:

[(UINavigationController *)self.presentingViewController popViewControllerAnimated:NO]; 
[self dismissViewControllerAnimated:YES completion:nil]; 

我有模态呈现的第一导航控制器视图控制器。第一个导航控制器屏幕称为主视图控制器。然后推送到登录视图控制器。登录视图控制器不提供ViewController到MenuViewController(UIViewController)。

我需要从MenuViewController一直返回到呈现第一个导航控制器的视图。谢谢。

试试这个

UIViewController *vc = self; 
while (vc.presentingViewController != nil) { 
    vc = vc.presentingViewController; 
} 
[vc dismissViewControllerAnimated:YES completion:nil]; 
+0

难道这不会对可维护性造成影响:在那里硬编码你的结构。 – siburb 2014-10-08 04:34:16

+0

因为在他的问题中,他出席了2次。但我会编辑答案。 – sahara108 2014-10-08 04:35:40

+1

@ sahara108它的工作,谢谢你!我在编辑之前尝试了这一点,它效果很好。我觉得有点受挫,我没有想到如此简单的事情。再次感谢! – Alec 2014-10-08 04:38:42

一种选择是使用NSNotifications。

您可以在您的第一个/ root/initial UINavigationController子类中添加观察者,例如

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(logout:) 
               name:@"LogoutNotification" 
               object:nil]; 

然后在您的“注销”的方法,你必须在初始UINavigationController的直接控制,而不是那些进一步上涨的层次结构。

然后,您可以从应用程序的任何位置发送NSNotification以触发该方法。

例如

[[NSNotificationCenter defaultCenter] postNotificationName:@"LogoutNotification" object:self];