0

参考这个问题:addChildViewController 替代 iOS 4.3

我的应用程序需要支持 4.3,因此我无法采用 Apple 容器编程指南中提到的方法 - http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

直接交换每个 ViewController 的视图目前对我有用,但是,在推送新的 View Controller 时,这些“孩子”没有对容器的引用,self.navigationController因此他们无法将新控制器推送到堆栈上。

在 iOS 4.3 中能够访问容器类的 UINavigationController 的最佳实践是什么。很遗憾我被迫支持 4.3,因为 Apple 文档中概述的 childViewController 模式正是我所需要的!

谢谢,

蒂姆。

4

1 回答 1

0

在 iOS 4 及之前的版本中,您不应该创建自己的 UIViewController 层次结构,因此您必须将视图直接作为 UIViewController 视图的子视图来操作。

但是,如果您正确执行此操作,仍然存在 UIViewController 层次结构并且它仍然有效。没有任何情况下您“没有参考” UINavigationController。一个视图有一个超级视图,它是另一个视图。UIViewController 的视图具有对 UIViewController 的引用(作为它的nextResponder)。UIViewController 有一个对其父 UINavigationController 的引用(如果有的话)。

如果不是这种情况,那么您在使用视图控制器时做错了什么。

Apple 的文档说明了这一点(适用于 iOS 4 及之前的版本),您应该非常认真地对待它:

您不应使用多个自定义视图控制器来管理同一视图层次结构的不同部分。...如果要将视图层次结构划分为多个子区域并分别管理每个子区域,请使用通用控制器对象(从 NSObject 下降的自定义对象)而不是视图控制器对象来管理每个子区域。然后使用单个视图控制器对象来管理通用控制器对象。

iOS 4及更高版本中的规则保持不变:不要使用 UIViewController,除非它作为合法 UIViewController 层次结构的一部分,其中视图控制器的视图处于完全相同的层次结构中,如我书中的这张图所示:

在此处输入图像描述

观察视图控制器是父视图和子视图它们的视图是父视图和子视图。这就是如何使用视图控制器层次结构。如果您在 iOS 4 中做的事情会违反这一点,请不要这样做。使用视图但使用视图控制器。

于 2013-03-22T16:43:45.500 回答