4

我正在繪製一個應用程序的工作流程,其中您有一個主菜單「0級」,調用模態視圖'1級',調用另一個模態視圖'2級'。iPhone - 關閉父模態視圖

我能得到這個工作,沒有問題,我能夠通過使用駁回整個堆棧:

[[[self parentViewController] parentViewController] dismissModalViewControllerAnimated:YES]; 
在模態視圖「二級」

我的問題是當模態視圖'2級'有一個導航欄我不能解僱整個堆棧。

[self dismissModalViewControllerAnimated:YES]; 

模態視圖「二級」:我上面列出的代碼只所以它真正的作用一樣,如果我做了這個讓我回到了一個級別。

總結: 當模態視圖「一級」調用模態視圖使用以下第2等級:

Level2 *level2 = [[[Level2 alloc] initWithNibName:@"Level2" bundle:nil] autorelease]; 
[self presentModalViewController:portalMainController animated:YES]; 

我可以關閉整個堆棧和回到主菜單(0級)。但是,當「一級」所謂的「二級」與類似下面的導航欄:

Level2 *level2 = [[[Level2 alloc] initWithNibName:@"Level2" bundle:nil] autorelease]; 
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:level2]; 
[self presentModalViewController:navigationController animated:YES]; 
[navigationController release]; 

我不能回到「0級」,我只有回到「1級」。

有什麼建議嗎?

回答

2

我會爲Level2控制器創建一個協議,例如Level2Delegate。然後將2級控制器的代表設置爲1級控制器。然後,你可以這樣做以下:

2級控制器將實現這個地方self.delegate是1級控制器

[self.delegate controllerDidFinish:self]; 

1級將實現:

- (void)controllerDidFinish:(Level2Controller *)controller { 
    [[self parentViewController] dismissModalViewControllerAnimated:NO]; 
} 

的關鍵是建立一系列事件,而不是立即解僱。

+0

謝謝。我已經設置了一個Level2協議,但我遇到了一個問題:「將2級控制器的代理設置爲1級控制器」。我已經閱讀了其他一些帖子,但我有一個問題圍繞着這個問題。 – CraigH 2010-07-11 22:07:55

+0

當1級實例化2級控制器時,可以執行level2.delegate = self; – rickharrison 2010-07-12 00:58:27

+0

太好了。謝謝瑞克,我明白了。 – CraigH 2010-07-12 01:05:21

0

爲什麼不使用,

[self.navigationController popToRootViewControllerAnimated:YES];