iPhone - 用另一个模态视图覆盖一个模态视图

标签 iphone ios cocoa-touch uiviewcontroller modalviewcontroller

我有一个主要 View 。
从该主视图中,我显示了一个模态视图 (MV1)。
MV1 可能会显示另一个模态视图 (MV2)。
从 MV2 开始,我可能会展示另一个模态视图(MV3)。

所有MV均以动画形式呈现。

我想要的是能够在“杀死”前一个模态视图 (MVx) 之前首先显示(动画)下一个模态视图 (MVx+1)。

如果我在显示 MVx+1 之前关闭(动画)MVx:MVx+1 不会出现。
如果我在显示 MVx+1 之前关闭(非动画)MVx:会看到 MVx-1。
如果我在关闭(非动画)MVx 之前显示 MVx+1:MVx+1 不会出现。

我该怎么办?

如果您有时间,一些代码示例会有所帮助,但只需详细解释就足够了。

最佳答案

根据 Apple 文档,消除模态视图的可接受方法是让父 Controller (即创建模态视图的 View Controller )进行消除。最好的方法是将父 Controller 设置为模态视图 Controller 的委托(delegate)。这里的想法是,模态 Controller 告诉其父级它已准备好被解雇,并且父级决定从那里采取什么行动方案。

为了做到这一点,您必须为父 Controller 实现的模态视图 Controller 创建委托(delegate)协议(protocol)。在您的情况下,您可以在每个 .h 文件的顶部为模态视图创建一个协议(protocol)来执行此操作(或者如果所有模态视图都可以使用相同的方法来关闭,则在单独的文件中创建一个协议(protocol))。例如:

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

接下来,在每个模态视图 Controller 中,为委托(delegate)创建一个实例变量:

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

当您从当前 View Controller 显示模态视图时,将当前 Controller 设置为委托(delegate)。

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

当您想要释放当前模态 Controller 时,让模态视图 Controller 在其委托(delegate)上调用适当的协议(protocol)方法:

[self.delegate dismiss];

现在,委托(delegate)可以处理下一步该去哪里。在您的情况下,您可以通过在 MV3 中调用 [self.delegate Dismiss] 在 MV3 关闭时自动关闭 MV2,然后在 MV2 中实现 dismiss 如下:

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

关于iPhone - 用另一个模态视图覆盖一个模态视图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7859161/

相关文章:

cocoa-touch - Interface Builder 中提供 "Mode"、 "Scale to fill"等的 "Aspect fit"属性是什么?

objective-c - iPhone 4 iOS 在没有 NavBar 和 TabBar 的情况下截取 View ?

iphone - 带有 nsdictionary 的 ios nsarrya 有 <null> 元素

iphone - 在应用程序运行时阻止 Iphone iOS 中的调用和短信

iphone - 将 Funambol SDK 集成到我的 iOS 应用程序时出错

ios - 尝试使用 AVAudioPlayer 快速播放音频时出错

javascript - 使用 StageWebView.loadString() 在 AIR for iOS 上显示 Google map

iphone - 使用 Xcode 4,拥有主项目 + 共享代码项目的正确方法是什么?

iphone - iOS6 中的 AudioToolBox 泄露?

ios - 任何人都可以帮助修复这个 DDMathParser 新功能吗?