美文网首页iOS
获取keyWindow的正解(与nil说byebye)

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

作者: wustzhy | 来源:发表于2016-09-01 13:33 被阅读441次
  • 现象: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方法中就可以获取到。
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)

    本文链接:https://www.haomeiwen.com/subject/pwwcettx.html