8

我有一个奇怪的案例——一个视图控制器,它在其中创建自己的视图,loadView然后将其添加到现有视图中。

以下是创建和添加 VC 的代码:

self.doneButtonViewController = [[DoneButtonViewController alloc] init];
[self.view addSubview:self.doneButtonViewController.view];

此代码viewDidLoad在“父”VC 中执行。

奇怪的是,viewWillAppear添加的 VC 的方法从未被调用(也不是viewDidAppear),但viewWillDisappear添加的 VC 的方法调用(在适当的时间),正如人们所期望的那样。

viewWillAppear关于为什么没有被调用的任何线索?

4

2 回答 2

15

如果您这样做,应用程序不知道子视图的视图控制器,您需要引入视图控制器包含以使根视图控制器知道。这样做将处理这样的任何事件。

因为loadView在 iOS 6 之前可以多次调用,所以我建议在 中创建视图控制器init,然后在loadView. 它应该是这样的:

- (id)init {
    ...
    self.doneButtonViewController = [[DoneButtonViewController alloc] init];
    [self addChildViewController:self.doneButtonViewController];
    [self.doneButtonViewController didMoveToParentViewController:self];
    ...
}

- (void)loadView {
    ...
    [self.view addSubview:self.doneButtonViewController.view];
    ...
}

请参阅http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html上的“实现容器视图控制器”

于 2012-11-27T22:21:59.783 回答
1

对我来说,在父视图控制器中添加子视图控制器可以解决子视图控制器的“viewWillAppear”没有被调用的问题。

于 2014-01-08T08:20:46.443 回答