根據蘋果文檔,以關閉模態視圖的接受的方法是通過使父控制器(即,創建該模態視圖視圖控制器)執行解聘。做到這一點的最好方法是將父控制器設置爲模態視圖控制器的代表。這裏的想法是,模態控制器告訴其父母它已準備好被解僱,並且父母決定從那裏採取什麼行動。
爲了做到這一點,你必須創建父控制器實現了模態視圖控制器的委託協議。在你的情況下,你可以在每個.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];
}
這是絕對必要的,爲您呈現'MVX + 1'當殺'MVx'? – Sean
@ Sean:不,但我不希望MVx + 1必須處理一些先前顯示的視圖。當殺死MV3時,我想回到MV1(無論MV1是什麼,MV1和MV3之間有什麼意見)。 – Oliver