現(xiàn)象: 在
viewdidLoad中, 發(fā)現(xiàn)通過sharedApplication] keyWindow]拿到的UIWindow是空的,所以沒法設(shè)置tintcolor。那為什么這樣子拿不到UIWindow呢?猜是沒有執(zhí)行[UIWindow makeKeyAndVisible]。
后來發(fā)現(xiàn)的確是在[UIWindow makeKeyAndVisible]之前去取keyWindow。原因: 當(dāng)在
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions里執(zhí)行makeKeyAndVisible的時候,他會調(diào)用第一個VC的viewDidLoad方法,在那里面調(diào)用keyWindow就無法取到UIWindow, 因為makeKeyAndVisible沒有執(zhí)行完。
以上解釋了在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:]
劇終!