未为子视图控制器调用viewWillAppear

时间:2012-11-27 22:04:28

标签: ios cocoa-touch uiviewcontroller

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:15)

如果执行此操作,应用程序不知道子视图的视图控制器,您需要引入视图控制器包含以使根视图控制器知晓。这样做会处理这样的事件。

因为在iOS 6之前可以多次调用loadView,我建议在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

上的“实施容器视图控制器”

答案 1 :(得分:1)

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