0

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

现在,我希望当我运行项目时,我会看到每当加载 A 时都会加载 B,但事实并非如此。为此,我必须在 A 的 viewDidLoad 方法中使用 initWithNibName 务实地初始化 B,并将其设置为 IBOutlet。但这部分并不依赖于在 A 中同时使用 IBOutlet 并向 A 添加一个指向 B 的 ViewController。换句话说,如果我只是在 A 的 viewDidLoad 中初始化了 B 而没有在 A 中创建 IBOutlet 并且没有创建 View A 中的控制器对象,它也可以正常工作。

所以我的问题是,使用 IBOutlet 添加自定义视图控制器 NIB 的目的是什么?

4

2 回答 2

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];
于 2011-05-29T21:25:21.193 回答
0

您不需要做所有这些,并且在当前显示的视图控制器视图层次结构中添加另一个视图控制器视图会导致界面旋转或触摸事件无法正确传递等问题。

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

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

于 2013-07-26T15:38:11.840 回答