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

时间:2011-08-02 13:17:19

标签: iphone objective-c ios4 modalviewcontroller presentmodalviewcontroller

我的问题类似于: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];

因为我不知道如何引用viewcontroller而不创建它的新实例。

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

所以不要使用:

[self dismissModalViewControllerAnimated:YES];
它会是:

[self.view dismissModalViewControllerAnimated:YES];

...

谢谢你们:)

2 个答案:

答案 0 :(得分:2)

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

为了节省自己的工作量,你应该坚持两条规则:

  1. 仅从视图控制器中呈现新的模态视图控制器,如:[self presentModal…];
  2. 仅从显示的视图控制器中关闭模态视图控制器,如下所示:[self dismiss…];
  3. 通过这种方式,您可以清楚地了解每个视图控制器的所有权和责任。此外,我在几乎所有地方看到的方法都是顶级使用[self.super dismiss…];来解除视图控制器将在iOS 5上中断。

答案 1 :(得分:0)

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

如果要关闭调用委托方法,然后可以使用自引用关闭视图。

因此,在第二个视图控制器中,您将调用[delegate dismissTheView],它将首先执行,然后调用[self dismissModalViewControllerAnimated];并向后跟随,直到您到达上一个视图。