2014-10-08 163 views
0

我需要一直回到呈現第一個導航控制器的視圖控制器。但是,我並沒有立即解僱多個控制器,而當我嘗試這樣做時,它不起作用。它只是前往第一個導航控制器,而不是前一個導航控制器。一次性關閉視圖控制器

這裏是我當前的代碼:

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

我有模態呈現的第一導航控制器視圖控制器。第一個導航控制器屏幕稱爲主視圖控制器。然後推送到登錄視圖控制器。登錄視圖控制器不提供ViewController到MenuViewController(UIViewController)。

我需要從MenuViewController一直返回到呈現第一個導航控制器的視圖。謝謝。

回答

2

試試這個

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

0

一種選擇是使用NSNotifications。

您可以在您的第一個/ root/initial UINavigationController子類中添加觀察者,例如

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

然後在您的「註銷」的方法,你必須在初始UINavigationController的直接控制,而不是那些進一步上漲的層次結構。

然後,您可以從應用程序的任何位置發送NSNotification以觸發該方法。

例如

[[NSNotificationCenter defaultCenter] postNotificationName:@"LogoutNotification" object:self]; 
相關問題