我正处于iOS编程的学习阶段。我试图在另一个NIB(称为A)中添加一个NIB(称为B)。为此,我在A中添加了一个使用B NIB(使用NIB名称)的View Controller。另外,在A的ViewController中,我创建了一个IBOutlet来存储B的ViewController。最后,在A中,我将IBOutlet连接到ViewController,引用了B.
现在,我希望当我运行项目时,我会看到只要加载A就会加载B,但事实并非如此。为此,我必须使用A的viewDidLoad方法中的initWithNibName实际初始化B,并将其设置为IBOutlet。但是这部分不依赖于在A中使用IBOutlet和向A引用B的ViewController。换句话说,如果我在A的viewDidLoad中简单地初始化B而不在A中创建IBOutlet而不创建视图A中的控制器对象,也可以正常工作。
所以我的问题是,使用IBOutlet添加自定义View Controller NIB的目的是什么?
答案 0 :(得分: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];
答案 1 :(得分:0)
您无需执行所有操作,并在当前显示的视图控制器视图层次结构中添加另一个viewcontroller视图会导致界面旋转或触摸事件等问题无法正确传递。
您可以使用uiviewcontroller's presentViewController:animated:completion:
方法加载bViewController's view hierarchy
,并且会自动调用viewDidAppear, viewDidLoad, viewWillAppear
等所有方法,您无需手动调用它们。
您会发现这篇文章Abusing UIViewControllers很有用。