现象: 在
viewdidLoad中, 发现通过sharedApplication] keyWindow]拿到的UIWindow是空的,所以没法设置tintcolor。那为什么这样子拿不到UIWindow呢?猜是没有执行[UIWindow makeKeyAndVisible]。
后来发现的确是在[UIWindow makeKeyAndVisible]之前去取keyWindow。原因: 当在
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions里执行makeKeyAndVisible的时候,他会调用第一个VC的viewDidLoad方法,在那里面调用keyWindow就无法取到UIWindow, 因为makeKeyAndVisible没有执行完。
以上解释了在viewDidLoad里无法获取keyWindow,那么只能在makeKeyAndVisible之前获取吗?👇
- 法一,在
viewDidAppear方法中就可以获取到。

A09DD919-B94F-4718-A870-8BA784CF4D11.png
- 法二,如下:
我们可以用
代替[[[UIApplication sharedApplication] delegate] window]
亲测可以,这个问题在iOS7中很常见,iOS8中苹果就解决了这个弊端[UIApplication sharedApplication].keyWindowUIWindow *window = [[[UIApplication sharedApplication] delegate] window] [window addSubview:]
剧终!