获取keyWindow的正解(与nil说byebye)

  • 现象:viewdidLoad中, 发现通过sharedApplication] keyWindow] 拿到的UIWindow是空的,所以没法设置tintcolor。那为什么这样子拿不到UIWindow呢?猜是没有执行[UIWindow makeKeyAndVisible]
    后来发现的确是在[UIWindow makeKeyAndVisible]之前去取keyWindow

  • 原因: 当在 -(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 里执行 makeKeyAndVisible 的时候,他会调用第一个VCviewDidLoad 方法,在那里面调用 keyWindow就无法取到UIWindow, 因为makeKeyAndVisible没有执行完。


以上解释了在viewDidLoad里无法获取keyWindow,那么只能在makeKeyAndVisible之前获取吗?

  • 法一,在viewDidAppear方法中就可以获取到。
获取keyWindow的正解(与nil说byebye)_第1张图片
A09DD919-B94F-4718-A870-8BA784CF4D11.png
  • 法二,如下:
    我们可以用
    [[[UIApplication sharedApplication] delegate] window] 
    
    代替
    [UIApplication sharedApplication].keyWindow 
    
    亲测可以,这个问题在iOS7中很常见,iOS8中苹果就解决了这个弊端
    UIWindow *window = [[[UIApplication sharedApplication] delegate] window]
    [window addSubview:]
    

剧终!

你可能感兴趣的:(获取keyWindow的正解(与nil说byebye))