我有一个主要观点 从主视图中我显示了一个模态视图(MV1) MV1可能会显示另一个模态视图(MV2) 从MV2,我可能会显示另一个模态视图(MV3)。
所有MV都显示为动画。
我想要的是能够在“杀死”前一个模式视图(MVx + 1)之前首先显示(动画)下一个模态视图(MVx + 1)。
如果我在显示MVx + 1之前解雇(动画)MVx:MVx + 1没有出现。
如果我在显示MVx + 1之前解除(非动画)MVx:看到MVx-1
如果我在解雇(非动画)MVx之前显示MVx + 1:MVx + 1没有出现。
我该怎么办?
如果您有时间,一些代码示例会有所帮助,但只需详细说明即可。
答案 0 :(得分:1)
根据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];
现在,代表可以处理下一步的去处。在您的情况下,您可以通过在MV3中调用[self.delegate dismiss]
来关闭MV3时自动关闭MV2,然后在MV2中实现dismiss
:
-(void)dismiss {
[self dismissModalViewControllerAnimated:YES];
[self.delegate dismiss];
}