-
现象: 在
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
方法中就可以获取到。
- 法二,如下:
我们可以用
代替[[[UIApplication sharedApplication] delegate] window]
亲测可以,这个问题在iOS7中很常见,iOS8中苹果就解决了这个弊端[UIApplication sharedApplication].keyWindow
UIWindow *window = [[[UIApplication sharedApplication] delegate] window] [window addSubview:]
剧终!
网友评论