当我添加一个视图到另一个视图(这两个视图是由视图控制器控制),我真的应该使用addChildViewController吗?

我正在用XIB构build一个UIViewController 。 在这个XIB中,我有其他视图控制器中的其他视图的占位符( UIView中的UIView对象)。 (顺便说一下,我也可以直接添加这些视图,没有占位符)

我不是build立一个容器视图控制器:我的意思是它不是一个UINavigationController 。 这只是一个“通常”的视图控制器。 想象一下,例如,我在我的视图中有一个小的子视图,用于“Facebook”徽标和计数器。 这个“Facebook视图”被附加到当“Facebook视图”被触摸时调用的另一个视图控制器。 所以,“Facebook控制器”肯定需要是我的“主”视图控制器@property

在这种情况下,我应该真的使用addChildViewController:和所有的机制? 或没有?

谢谢!

你不应该使用UIViewController来“钓鱼”到一个.xib文件中来获取视图。 如果这就是你想要的,不要这样做。 只需加载笔尖,直接拉出视图:

 NSArray* objects = [[UINib nibWithNibName: @"MyNib" bundle: nil] instantiateWithOwner:nil options:nil]; UIView* v = (UIView*)[objects firstObject]; 

但是,如果因为某些其他原因而将UIViewController与此.xib文件结合使用,例如要保持活动状态,以便.xib中的button可以将消息发送到此UIViewController,那么绝对必须build立适当的父 – 子关系,正如我在本书中所描述的那样: http : //www.apeth.com/iOSBook/ch19.html#_container_view_controllers

是的你应该。 通过这样做,包含视图控制器将适当的视图控制器生命周期事件发送到子视图控制器。

你说你没有build立一个容器视图控制器,但你是。 将另一个视图控制器的视图添加到另一个视图控制器是一个容器视图控制器的定义。

请参阅UIViewController文档的“实现容器视图控制器”部分,了解您应该进行的方法调用的正确顺序。 这不仅仅是调用addChildViewController

你可以实例化你的内部ViewController,并将其视图(myInsiderViewController.view)添加到你的主视图控制器中:

 [mainViewController.view addSubView:myInsiderViewController.view];