0

在我的应用程序中,我有三层模式视图控制器。

1)所以我rootViewController是一个tabbar

2)在applicationDidFinishLaunching我提出一个viewControllerviewController A上面模态说tabbar

3)单击“viewController A”中的按钮时,我会呈现另一个viewController B模态。

4) 一个按钮动作以模态方式viewController B呈现navigationController,其rootViewControlleras viewController C

5) 最后从viewController C,我想回到viewController A

我尝试使用

[[[self parentViewController] parentViewController]dismissModalViewControllerAnimated:YES];

viewController C,但它让我回到viewController B而不是viewController A

我怎样才能恢复到viewController A.

任何帮助,将不胜感激。

4

3 回答 3

2

使用看起来像 modalTransitionStyle 的 transitionStyle 将所有“模态”视图推送到 navigationControl 上。不要重新发明东西

将所有内容呈现在一个模态navigationController Id 中说:)

于 2012-11-10T18:57:09.967 回答
1

你有一个复杂的 VC 堆栈。你可以像一位发帖人建议的那样实现一个自定义的dismissView方法,但这会很脆弱:如果你重用这个视图,或者在你的应用程序中移动它,它将停止运行,因为它过于依赖于其他VC如何配置的特定知识他们的状态。

您可以配置委托链。这将是操作视图的标准方式:呈现的 VC 还负责删除它呈现的任何内容。

为此,构建由 B 实现的协议,并使用对 B 的引用初始化 C。类似地,使用对 A 的引用初始化 B(可能使用相同的协议,具体取决于需要在它们之间传递的任何其他通信。)

然后当在 C 上单击按钮时,它会调用 B 的委托方法。B 适当地展开 C,并调用 A 的委托方法。A 适当地展开 B。

这具有保持 VC 知识封装的优点:A 知道它如何呈现 B,因此它知道如何取消呈现它,B 知道它如何呈现 C,并且知道如何取消呈现它。在任何情况下,一个 VC 都不需要对另一个 VC 是如何呈现的做出假设。

于 2012-11-10T18:35:36.403 回答
0

实现视图关闭方法,如:

- (IBAction)dismissView
 {
   [self dismissModalViewControllerAnimated:NO];   // dismiss c
   [[self parentViewController] dismissModalViewControllerAnimated:NO]; //dismiss b
 }

[self parentViewController]将返回 的父视图viewControllerC,即viewControllerB. 所以它也会驳回这种观点。

于 2012-11-10T09:25:16.827 回答