iOS 中rootViewcontroller获取

获取工程中window的rootViewcontroller的方法:

  • 方法一
UIWindow *window = [UIApplication shareApplication].keyWindow;
UIViewController *rootViewController = window.rootViewController;

*方法二

AppDelegate *appDelegate = (AppDelegate*)[UIApplication shareApplication].delegate;
UIViewController *rootViewController = appDelegate.window.rootViewController;

两种方法获取到的在一般的时候是没有区别的,但是在有时候就不一样了。

[UIApplication sharedApplication].keyWindow

其中的keyWindow:我理解的是在windows数组中最近调用makeKeyAndVisible方法的属性。
这个我们可以参考UIAlertView来理解:
alertView的出现是生成了一个新的window,展示在界面上。这时我们获取到的keyWindow就是UIAlertControllerShimPresenterWindow这时我们通过keyWindow获取到的rootViewcontroller就不对了。所以我建议还是通过第二种方法来获取rootViewcontroller

你可能感兴趣的:(iOS 中rootViewcontroller获取)