在我的应用程序中,我有三层模态视图控制器。
1)所以我的rootViewController
是tabbar
。
2)在applicationDidFinishLaunching
上,我提出viewController
,比viewController A
模仿tabbar
。
3)点击'viewController A'中的按钮,我会以模态方式呈现另一个viewController B
。
4)viewController B
上的按钮操作以navigationController
形式rootViewController
为viewController C
。
5)最后来自viewController C
,我想回到viewController A
。
我尝试使用
[[[self parentViewController] parentViewController]dismissModalViewControllerAnimated:YES];
viewController C
中的,但它会将我还原为viewController B
而不是viewController A
。
如何恢复为viewController A
。
任何帮助都将不胜感激。
答案 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
。所以它也会忽视这个观点。