2

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

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

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

谢谢!

4

3 回答 3

4

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

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

但是,如果您出于其他原因将 UIViewController 与此.xib文件结合使用,例如,为了使其保持活动状态,以便.xib中的按钮可以向此 UIViewController 发送消息,那么您绝对必须建立适当的父子关系,正如我在书中所描述的:http ://www.aeth.com/iOSBook/ch19.html#_container_view_controllers

于 2015-04-30T19:14:18.683 回答
2

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

你说你不是在构建一个容器视图控制器,但你是。将另一个视图控制器的视图添加到另一个视图控制器是容器视图控制器的定义。

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

于 2015-04-30T17:23:09.517 回答
0

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

[mainViewController.view addSubView:myInsiderViewController.view];
于 2015-04-30T17:18:50.033 回答