解雇3层模态视图

时间:2012-11-10 09:18:43

标签: iphone ios xcode ipad ios5

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

1)所以我的rootViewControllertabbar

2)在applicationDidFinishLaunching上,我提出viewController,比viewController A模仿tabbar

3)点击'viewController A'中的按钮,我会以模态方式呈现另一个viewController B

4)viewController B上的按钮操作以navigationController形式rootViewControllerviewController C

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

我尝试使用

[[[self parentViewController] parentViewController]dismissModalViewControllerAnimated:YES];
viewController C中的

,但它会将我还原为viewController B而不是viewController A

如何恢复为viewController A

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

在navigationControl上推送所有'模态'视图,其transitionStyle看起来像modalTransitionStyle..dont重新发明内容

目前所有在一个模态navigationController Id中说:)

答案 1 :(得分:1)

你有一个复杂的VC堆栈。您可以像一张海报建议实现自定义dismissView方法,但这将是脆弱的:如果您重复使用此视图,或在您的应用程序中移动它,它将停止运行,因为它过分依赖于其他VC如何配置的特定知识他们的州。

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

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

然后当在C上单击按钮时,它会调用B的委托方法。 B根据需要展开C,并调用A的委托方法。根据需要展开B.

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

答案 2 :(得分:0)

实施视图解雇方法,如:

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

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