我有一个奇怪的案例——一个 View Controller 在 loadView
中创建自己的 View ,然后将其添加到现有 View 中。
下面是创建和添加 VC 的代码:
self.doneButtonViewController = [[DoneButtonViewController alloc] init];
[self.view addSubview:self.doneButtonViewController.view];
此代码在“父”VC 的 viewDidLoad
中执行。
奇怪的是添加的 VC 的 viewWillAppear
方法从未被调用(viewDidAppear
也没有),但是 viewWillDisappear
方法添加的 VC 被调用(在适当的时间),正如人们所期望的那样。
关于为什么 viewWillAppear
没有被调用的任何线索?
最佳答案
如果你这样做,应用程序并不知道 subview 的 View Controller ,你需要引入 View Controller 容器来让 Root View Controller 知道。这样做将处理任何此类事件。
因为 loadView
在 iOS 6 之前可以被调用不止一次,我建议在 init
中创建 View Controller ,然后在 loadView 中添加 subview
。应该是这样的:
- (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 上的“实现容器 View Controller ”
关于ios - 未为 subview Controller 调用 viewWillAppear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593972/