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.view
是 UIView
实例,完全不同。
为了节省自己的工作量,您应该遵守两条规则:
-
仅显示来自视图控制器的新模式视图控制器,如下所示:
[self presentModal…];
。
仅从正在呈现的视图控制器中关闭模态视图控制器,如下所示:[self dismiss…];
。
这样您就可以清楚地了解每个视图控制器的所有权和责任。此外,我在几乎所有地方都看到过使用[self.super dismiss…];
关闭视图控制器的方法将在 ios 5 上中断。
【讨论】:
哈哈,原来在 viewcontroller 类中嵌套 presentModalViewController 调用,然后将它们从同一个 VC 类中解散就可以完美地工作。谢谢:)【参考方案2】:您需要在这里使用委托模式。使第一个视图控制器的根视图控制器委托,第一个视图控制器为第二个视图控制器的委托,依此类推。
当您想要关闭时调用委托方法,然后您可以使用自引用关闭视图。
因此,在第二个视图控制器中,您将调用 [delegate dismissTheView]
,这将在第一个实现并调用 [self dismissModalViewControllerAnimated];
并向后执行相同的操作,直到您到达最后一个视图。
【讨论】:
我对代表不是很熟悉,但我相信它会起作用:)以上是关于iPhone - 在另一个模态视图中嵌套当前模态视图的主要内容,如果未能解决你的问题,请参考以下文章
在不覆盖 iPhone 上的当前视图的情况下呈现模态视图控制器