美文网首页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