【发布时间】:2010-10-17 10:55:17
【问题描述】:
我正在使用-addSubView 添加一个视图。我也在其他地方使用视图和presentModalViewController。
-viewWillAppear 是用 presentModalViewController 调用的,但不是用 addSubView 调用的。
毫无疑问,这是显而易见的事情?
【问题讨论】:
我正在使用-addSubView 添加一个视图。我也在其他地方使用视图和presentModalViewController。
-viewWillAppear 是用 presentModalViewController 调用的,但不是用 addSubView 调用的。
毫无疑问,这是显而易见的事情?
【问题讨论】:
viewWillAppear: 由父视图控制器在呈现另一个视图控制器时调用(例如,pushViewController:animated: 或 presentModalViewController:animated:)。手动调用addSubview:时永远不会调用它。
【讨论】:
上面的答案似乎并不正确,无论如何在 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。)
【讨论】: