iPhone,addSubView 不调用 willViewAppear?

Posted

技术标签:

【中文标题】iPhone,addSubView 不调用 willViewAppear?【英文标题】:iPhone, addSubView doesn't call willViewAppear? 【发布时间】:2010-10-17 10:55:17 【问题描述】:

我正在使用-addSubView 添加一个视图。我也在其他地方使用视图和presentModalViewController

-viewWillAppear 是用 presentModalViewController 调用的,但不是用 addSubView 调用的。

毫无疑问,这是显而易见的事情?

【问题讨论】:

【参考方案1】:

viewWillAppear: 由父视图控制器在呈现另一个视图控制器时调用(例如,pushViewController:animated:presentModalViewController:animated:)。手动调用addSubview:时永远不会调用它。

【讨论】:

【参考方案2】:

上面的答案似乎并不正确,无论如何在 ios 6.1 中。当我使用这样的控制器创建视图时:

    self.welcomeController = [[DPLWelcomeViewController alloc] initWithNibName:@"DPLWelcomeViewController" bundle:nil];
    self.welcomeController.view.frame = self.window.screen.applicationFrame;
    self.welcomeController.delegate = self;
    [self.window.rootViewController.view addSubview:self.welcomeController.view];

-viewWillAppear 确实被调用(只要 self.welcomeController 是一个强属性)。

另一方面,当我这样做时:

    DPLWelcomeViewController *welcomeController = [[DPLWelcomeViewController alloc] initWithNibName:@"DPLWelcomeViewController" bundle:nil];
    welcomeController.view.frame = self.window.screen.applicationFrame;
    welcomeController.delegate = self;
    [self.window.rootViewController.view addSubview:welcomeController.view];

一旦此方法退出,ARC 就会对其进行清理,据我所知,-viewWillAppear 被发送到 nil。 (尽管我可以在屏幕上看到 Welcome 视图——我相信 rootViewController.views 保留了 view,但没有保留 viewController。)

【讨论】:

以上是关于iPhone,addSubView 不调用 willViewAppear?的主要内容,如果未能解决你的问题,请参考以下文章

addSubview 在 iOS 3.1.3 上不显示视图

iphone/ipad - 使用 Autoresize 和 addSubview 出现问题

Iphone AddSubView 功能上令人费解的错误

如果在 addSubView 之后调用 UIButton 不会移动

iPhone:管理视图动画到异步事件

uiButton 应始终作为 iPhone 中的顶视图