Согласно документации Apple, принятый способ отклонить модальные представления - позволить родительскому контроллеру (то есть контроллеру представления, который создал модальное представление) выполнить отклонение.Лучший способ сделать это - установить родительский контроллер в качестве делегата модального контроллера представления.Идея заключается в том, что модальный контроллер сообщает своему родителю, что он готов к увольнению, и родитель решает, какой курс действий оттуда предпринять.
Чтобы сделать это, вы должны создать протокол делегата.для модального контроллера представления, который реализует родительский контроллер.В вашем случае вы можете создать протокол в верхней части каждого из ваших файлов .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, вызвав [self.delegate dismiss]
в MV3, а затем реализовать dismiss
в MV2 как:
-(void)dismiss {
[self dismissModalViewControllerAnimated:YES];
[self.delegate dismiss];
}