我正在开发一个应用程序,它使用 iOS SDK 中的 View Controller 文档中描述的控制器包含模式。
我已经编写了控制器容器,效果很好。我的控制器基本上包含两个子视图,它同时显示它们,根据用户的操作将一个在另一个上滑动。效果很好。
现在,我想在导航视图中使用这个容器控制器。这是为了让 push segues 发挥作用。实际上,从我包含的控制器中,我希望能够使用导航堆栈,推送一个新控制器,并在用户完成时弹出。
但是,我注意到如果导航视图是用我的容器控制器作为根容器来实例化的,事情就会崩溃。
特别是,我注意到了这一点:
在 iOS 文档中,容器控制器调用 addChildController: 然后 addSubview:。这似乎破坏了导航堆栈,因为 push segue 不起作用 - 它的行为类似于模态。我相信这样做是因为 addSubview 重置了导航堆栈。
我通过用 [self.navigationController pushViewController...] 替换 addChildController 和 addSubview 来确认这一点。我确认这是 addSubview 的问题,因为当我省略对 addChildController 的调用时,我可以重现该问题。
当我这样做时,导航堆栈正常工作。但当然,我的容器控制器没有,因为只有“最近推送”的控制器是可见的。
我这样做是因为在我包含的控制器中,我想将一个新控制器推入堆栈,当用户完成后,我想“弹出”堆栈,而不重新加载“先前的控制器”。
使用模态 segue 重新加载以前的控制器;使用推送控制器不会。
我找不到关于 addSubview 行为的任何文档,它对导航堆栈的影响。
提前感谢你们提供的任何启示!