未为子视图控制器调用viewWillAppear

Hot*_*cks 8 cocoa-touch uiviewcontroller ios

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

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

self.doneButtonViewController = [[DoneButtonViewController alloc] init];
[self.view addSubview:self.doneButtonViewController.view];
Run Code Online (Sandbox Code Playgroud)

该代码viewDidLoad在"父"VC中执行.

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

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

WDU*_*DUK 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];
    ...
}
Run Code Online (Sandbox Code Playgroud)

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