gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:56:34 26 4
gpt4 key购买 nike

我有一个主要 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com