我有以下视图控制器层次结构与父子关系。
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。怎么做到这一点?
答案 0 :(得分:1)
UINavigationController
提供了一个-setViewControllers:animated:
方法,可用于修改导航堆栈。它通常用于将应用程序恢复到用户离开应用程序时的状态。来自文档:
使用此方法更新或替换当前视图控制器堆栈 无需显式推送或弹出每个控制器。此外, 此方法允许您在不设置动画的情况下更新控制器集 这些更改可能适合您在发布时的需要 将导航控制器返回到先前的状态。
也就是说,使用这种方法替换堆栈中的视图控制器听起来像是一个糟糕的计划,从UI的角度来看 - 似乎可能会让用户感到困惑,他们完全希望父控制器不会变形为完全不同的东西。 / p>
答案 1 :(得分:0)
委托是适当的解决方案,其中源父(委托)通过链向下传递给叶控制器(想要回调)。
这是令人不愉快的事实表明你想要做的事情有点奇怪。但是,不知道要求限制了更大的建议。
如果你想欺骗你的出路(你不应该),那么发布通知的代码要少得多。使用块作为委托模式的实现是中等代码。