iPhone - 在另一个模态视图中嵌套当前模态视图

Posted

技术标签:

【中文标题】iPhone - 在另一个模态视图中嵌套当前模态视图【英文标题】:iPhone - nesting presentModalView within another Modal View 【发布时间】:2011-08-02 13:17:18 【问题描述】:

我的问题类似于:iPhone modal view inside another modal view? 和 Can I push a modal view controller from within another modal view controller?,但是有一个区别:

我的控制器都不是 UINavigationControllers(我认为这就是它们的名称)。

所以基本上我有这个:

RootView(各种选项,例如提交费用、检查日历等)--> 选择提交费用并调用以下代码:

EXP = [[ExpensesViewController alloc] initWithNibName:@"ExpensesViewController" bundle:nil];

    [self presentModalViewController:EXP animated:YES];

所以现在主视图顶部有一个模态视图。然后在费用模式视图中,我希望能够选择一个打开模式视图的按钮(在类似的代码中)......

我从上面介绍中的两个问题了解到,这样做基本上看起来像这样:

[controllerA presentModalViewController:Number2 animated:YES];

是否可以改为这样:

[self.view presentModalViewController:Number2 animated:YES];

因为我不知道如何在不创建新实例的情况下引用视图控制器。

另外,当需要关闭第二个以便我可以返回到第一个模态视图时(基本上我打开一个模态视图来提交费用,然后作为表单的一部分,他们必须选择一个选项 - 对于 UI目的是新的模态视图是最好的。一旦他们决定选择,他们会通过关闭额外详细的模态视图返回到费用视图,提交费用,一旦他们这样做,那么该模态视图就会关闭。

所以不要使用:

[self dismissModalViewControllerAnimated:YES];

会是:

[self.view dismissModalViewControllerAnimated:YES];

??

谢谢大家:)

【问题讨论】:

【参考方案1】:

只有UIViewController 及其子类可以呈现模态视图控制器。 self.viewUIView 实例,完全不同。

为了节省自己的工作量,您应该遵守两条规则:

    仅显示来自视图控制器的新模式视图控制器,如下所示:[self presentModal…];。 仅从正在呈现的视图控制器中关闭模态视图控制器,如下所示:[self dismiss…];

这样您就可以清楚地了解每个视图控制器的所有权和责任。此外,我在几乎所有地方都看到过使用[self.super dismiss…]; 关闭视图控制器的方法将在 ios 5 上中断。

【讨论】:

哈哈,原来在 viewcontroller 类中嵌套 presentModalViewController 调用,然后将它们从同一个 VC 类中解散就可以完美地工作。谢谢:)【参考方案2】:

您需要在这里使用委托模式。使第一个视图控制器的根视图控制器委托,第一个视图控制器为第二个视图控制器的委托,依此类推。

当您想要关闭时调用委托方法,然后您可以使用自引用关闭视图。

因此,在第二个视图控制器中,您将调用 [delegate dismissTheView],这将在第一个实现并调用 [self dismissModalViewControllerAnimated]; 并向后执行相同的操作,直到您到达最后一个视图。

【讨论】:

我对代表不是很熟悉,但我相信它会起作用:)

以上是关于iPhone - 在另一个模态视图中嵌套当前模态视图的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:如何从左到右制作当前的模态视图控制器动画

在不覆盖 iPhone 上的当前视图的情况下呈现模态视图控制器

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

在 nativescript 中的模态中打开模态

iOS - 目前的模态视图控制器会导致一些动画伪影(iPhone)

iPhone 的模态登录视图