【问题标题】:iPhone - nesting presentModalView within another Modal ViewiPhone - 在另一个模态视图中嵌套当前模态视图
【发布时间】: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];

??

谢谢大家:)

【问题讨论】:

    标签: iphone objective-c ios4 modalviewcontroller presentmodalviewcontroller


    【解决方案1】:

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

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

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

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

    【讨论】:

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

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

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

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

    【讨论】:

    • 我对代表不是很熟悉,但我相信它会起作用:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多