ios - 未为 subview Controller 调用 viewWillAppear

标签 ios cocoa-touch uiviewcontroller

我有一个奇怪的案例——一个 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/

相关文章:

ios - (AIR iOS) NetStream.play() 阻止 native 扩展中的麦克风访问

ios - 自定义 UITableViewCell 重叠对象

iOS Google Maps API - View 和标签不会覆盖在 map 上

ios - [UIViewController setRecipeName :]: unrecognized selector sent to instance

ios - 返回 UITableViewController 时关闭 UIWebView

ios - SwiftUI |如果被 ScrollView 取消,则从不调用 DragGestures onEnded

ios - 使用 shareKit 在 Twitter 上分享图片。推文中可见缩短的 URL,而不是实际附加的图像

iphone - 检测在 pagingEnabled UIScrollView 中显示的是哪个 UIView

ios - 我可以模态呈现作为导航 Controller 一部分的 View Controller 吗?

ios - 跨多个 subview 处理触摸事件