替换父视图控制器

时间:2014-01-20 17:54:38

标签: ios uiviewcontroller

我有以下视图控制器层次结构与父子关系。

VC1 - VC2 - VC3 - VC4 - VC5

每个视图控制器都是前任的子级。

我使用过代码 -

   [parentVC addChildViewController:childVC];

   [childVC.view setFrame:parentVC.view.frame];

   [parentVC.view addSubview:childVC.view];

   [childVC didMoveToParentViewController:parentVC];

现在,我希望将VC1替换为另一个视图控制器,比如VC5中的操作后该层次结构中的VC0 ,即删除VC2后,我想要VC0而不是VC1。怎么做到这一点?

2 个答案:

答案 0 :(得分:1)

UINavigationController提供了一个-setViewControllers:animated:方法,可用于修改导航堆栈。它通常用于将应用程序恢复到用户离开应用程序时的状态。来自文档:

  

使用此方法更新或替换当前视图控制器堆栈   无需显式推送或弹出每个控制器。此外,   此方法允许您在不设置动画的情况下更新控制器集   这些更改可能适合您在发布时的需要   将导航控制器返回到先前的状态。

也就是说,使用这种方法替换堆栈中的视图控制器听起来像是一个糟糕的计划,从UI的角度来看 - 似乎可能会让用户感到困惑,他们完全希望父控制器不会变形为完全不同的东西。 / p>

答案 1 :(得分:0)

委托是适当的解决方案,其中源父(委托)通过链向下传递给叶控制器(想要回调)。

这是令人不愉快的事实表明你想要做的事情有点奇怪。但是,不知道要求限制了更大的建议。

如果你想欺骗你的出路(你不应该),那么发布通知的代码要少得多。使用块作为委托模式的实现是中等代码。