0

我有一個主視圖。
從那個主視圖我顯示一個模式視圖(MV1)。
MV1可能會顯示另一個模態視圖(MV2)。
從MV2開始,我可能會顯示另一個模態視圖(MV3)。iPhone - 用另一種模式查看模式查看

所有這些MV顯示動畫。

我想要的是能夠在「殺死」前一個(MVx)之前首先顯示(動畫)下一個模態視圖(MVx + 1)。

如果我表示MVX + 1之前駁回(動畫)MVX:MVX + 1不會出現。
如果我在顯示MVx + 1之前解除(非動畫)MVx:MVx-1被看到。
如果在解散前顯示MVx + 1(非動畫)MVx:MVx + 1不會出現。

我可怎麼辦?

一些代碼示例會幫助,如果你有時間,而只是一個詳細的解釋就足夠了。

+0

這是絕對必要的,爲您呈現'MVX + 1'當殺'MVx'? – Sean

+0

@ Sean:不,但我不希望MVx + 1必須處理一些先前顯示的視圖。當殺死MV3時,我想回到MV1(無論MV1是什麼,MV1和MV3之間有什麼意見)。 – Oliver

回答

1

根據蘋果文檔,以關閉模態視圖的接受的方法是通過使父控制器(即,創建該模態視圖視圖控制器)執行解聘。做到這一點的最好方法是將父控制器設置爲模態視圖控制器的代表。這裏的想法是,模態控制器告訴其父母它已準備好被解僱,並且父母決定從那裏採取什麼行動。

爲了做到這一點,你必須創建父控制器實現了模態視圖控制器的委託協議。在你的情況下,你可以在每個.h文件的頂部爲你的模態視圖創建一個協議來做到這一點(或者如果所有的模態視圖都可以使用相同的方法解除,則在單獨的文件中使用單個協議)。例如:

@protocol MYModalViewDelegate <NSObject> 
    -(void)dismiss; 
@end 

接下來,在每個模態的視圖控制器,用於委託創建一個實例變量:

@interface MYModalViewController1 : UIViewController { 
    id<MYModalViewDelegate> delegate; 
} 

當從當前視圖控制器顯示一個模式圖,設置當前控制器作爲代表。

MYModalViewController1 * mvc1 = [[MYModalViewController1 alloc] initWithNibName:@"MYModalViewController1" bundle:nil]; 
mvc1.delegate = self; 
[self presentModalViewController:mvc1 animated:YES]; 
[mvc1 release]; 

當你要釋放的電流模式控制器,有模態視圖控制器調用相應的協議方法在其代表:現在

[self.delegate dismiss]; 

,委託可以處理下一步去哪裏。你的情況,你可以關閉自動MV2 MV3時關閉通過調用MV3 [self.delegate dismiss],然後在MV2實施dismiss爲:

-(void)dismiss { 
    [self dismissModalViewControllerAnimated:YES]; 
    [self.delegate dismiss]; 
} 
+0

如果我明白了,您可以從另一個模態視圖打開模態視圖,不是嗎? – VansFannel