0

我正在开发一个应用程序,它使用 iOS SDK 中的 View Controller 文档中描述的控制器包含模式。

我已经编写了控制器容器,效果很好。我的控制器基本上包含两个子视图,它同时显示它们,根据用户的操作将一个在另一个上滑动。效果很好。

现在,我想在导航视图中使用这个容器控制器。这是为了让 push segues 发挥作用。实际上,从我包含的控制器中,我希望能够使用导航堆栈,推送一个新控制器,并在用户完成时弹出。

但是,我注意到如果导航视图是用我的容器控制器作为根容器来实例化的,事情就会崩溃。

特别是,我注意到了这一点:

在 iOS 文档中,容器控制器调用 addChildController: 然后 addSubview:。这似乎破坏了导航堆栈,因为 push segue 不起作用 - 它的行为类似于模态。我相信这样做是因为 addSubview 重置了导航堆栈。

我通过用 [self.navigationController pushViewController...] 替换 addChildController 和 addSubview 来确认这一点。我确认这是 addSubview 的问题,因为当我省略对 addChildController 的调用时,我可以重现该问题。

当我这样做时,导航堆栈正常工作。但当然,我的容器控制器没有,因为只有“最近推送”的控制器是可见的。

我这样做是因为在我包含的控制器中,我想将一个新控制器推入堆栈,当用户完成后,我想“弹出”堆栈,而不重新加载“先前的控制器”。

使用模态 segue 重新加载以前的控制器;使用推送控制器不会。

我找不到关于 addSubview 行为的任何文档,它对导航堆栈的影响。

提前感谢你们提供的任何启示!

4

1 回答 1

0

I'm having a bit of trouble completely understanding what you are doing, but I think that what you want to do is exactly what I'm doing.

I have a UINavigationController that has as its rootView a container UIViewController. That controller adds children per the normal methods. One of those children views pushes other views that may get popped.

One of those pushed views COULD message the appDelegate and make itself the rootViewController if it wanted to. In general, as long as you keep a strong reference to a view controller, you can remove it from whoever 'owns' it, and muck around with the navigationControllers viewControllers array to your hearts content.

于 2012-10-01T13:21:26.433 回答