2

我的问题类似于:iPhone modal view inside another modal view? 我可以从另一个模态视图控制器中推送模态视图控制器吗?,但是有一个区别:

我的控制器都不是 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 目的,一个新的modalview 是最好的。一旦他们决定选择,他们通过关闭额外的详细模式视图返回到费用视图,提交费用,一旦他们这样做,然后该模式视图关闭)。

所以不要使用:

[self dismissModalViewControllerAnimated:YES];

可不可能是:

[self.view dismissModalViewControllerAnimated:YES];

??

多谢你们:)

4

2 回答 2

2

只有UIViewController及其子类可以呈现模态视图控制器。self.view是一个UIView实例和完全不同的东西。

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

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

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

于 2011-08-02T13:24:49.233 回答
0

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

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

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

于 2011-08-02T13:25:22.807 回答