2011-05-29 72 views
0

我正处于iOS编程的学习阶段。我试图在另一个NIB(称为A)中添加一个NIB(称为B)。为此,我在A中添加了一个使用B NIB的视图控制器(使用NIB名称)。另外,在A的ViewController中,我创建了一个IBOutlet来存储B的ViewController。最后,在A中,我将IBOutlet连接到了ViewController,引用B.使用UIViewController的目的是什么IBOutlet

现在,我期望当我运行该项目时,我会看到只要A被加载就会加载B,但事实并非如此。为了实现这一点,我必须在A的viewDidLoad方法中使用initWithNibName实用地初始化B,并将其设置为IBOutlet。但是这部分是不依赖于在A中同时使用IBOutlet和向A中添加引用B的ViewController。换句话说,如果我在A的viewDidLoad中简单初始化B,而不在A中创建IBOutlet并且不创建视图A中的控制器对象,也可以工作。

所以我的问题是,使用IBOutlet添加自定义View Controller NIB的目的是什么?

+2

IBOutlet只是interfacebuilder的一个标记,还记得视图和它们相关的nib是可延迟加载的可可触摸 – kgutteridge 2011-05-29 18:00:27

+0

如果你还在学习基础知识,不要试图在另一个viewcontroller中嵌入viewcontroller。先学习基础知识。获得一个好的入门教程并阅读开发者指南。 – 2013-07-26 15:41:53

回答

0

仅仅因为您在VC A中有VC B的插座,这并不意味着VC B的视图会自动加载。如果您在VC A viewDidLoad中检查VC B插座,则会看到VC B的地址,因此加载了NIB。要加载其观点,你必须访问VCB.view并调用适当的方法在VCB是这样的:

[self.bViewController setFrame:[self frame]]; 
    [self.bViewController viewDidLoad]; 
[self.bViewController viewWillAppear:NO]; 
[self.view addSubview:self.bViewController.view]; 
[self.bViewController viewDidAppear:NO]; 
0

你不需要做这一切,并在当前显示视图控制器视图层次增加另一个视图 - 控制视图会导致问题像界面旋转或触摸事件不能正确传送。

您可以使用uiviewcontroller's presentViewController:animated:completion:方法加载bViewController's view hierarchy,所有方法如viewDidAppear, viewDidLoad, viewWillAppear都会自动调用,不需要手动调用它们。

你会发现这篇文章Abusing UIViewControllers有用。