ios - appDelegate 设置 rootViewController 和 viewWillAppear 不被调用?
问题描述
这是演示,我设置RootViewController
了didFinishLaunchingWithOptions
,但viewController
没有viewWillAppear
调用!我猜是因为NavigationController
添加了ViewController
消息的响应链失败了?
我知道它应该设置为
self.window.rootViewController = navigationController
但我想知道我设置了什么
self.window.rootViewController = mainViewController
为什么不打电话呢mainViewController
?viewWillAppear
谢谢你。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
ViewController *mainViewController = [[ViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
self.window.rootViewController = mainViewController;
[self.window makeKeyAndVisible];
return YES;
}
视图控制器.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"viewWillAppear");
}
@end
解决方案
嗯……有趣。
保留以下内容:
[[UINavigationController alloc] initWithRootViewController:mainViewController];
即使它没有使用,似乎正在窃取ViewController's
viewDidAppear
.
如果您评论该行,那么它会按您的意愿工作。
IE:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
ViewController *mainViewController = [[ViewController alloc] init];
//Comment the navigationController instantiation
//UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
self.window.rootViewController = mainViewController;
[self.window makeKeyAndVisible];
return YES;
}
也许 thenavigationController
被设置为拥有,ViewController
但由于它没有出现在屏幕上,viewDidLoad
直到viewDidAppear
稍后才会出现,但是......当你重新分配ViewController
给窗口时,内部视图加载逻辑感觉viewDidAppear
不再需要被调用。
也许是一个错误或故意的,我不知道。
注意:我真的没有这种行为的理由。我只是在阐明造成它的原因。
推荐阅读
- vba - 将 Excel 工作簿导入 Access 并添加列时出现问题;错误 3127
- arrays - Can I translate a range of data in Google Sheet with GoogleTranslate foruma?
- c++ - accelerating a Gaussian blur of floats with NEON intrinsics
- c++ - How do I automatically include folders and files to the deployment project in visual studio?
- node.js - How to write routing and app.js correctly in Node.js
- sql-server - How to change server name in SQL Server connection options?
- php - Start retrieved records at 0 MySQL Laravel
- javascript - 在反应中动态操作dom元素?
- node.js - 由于 int 导致访问 json 数组的问题
- algorithm - 如何以最佳方式挑选最大数量的橙子?