UIWindow的应用场景
最近工作中,遇到某个控制器需要弹出多个UIAlertController,当我用[UIApplication sharedApplication].delegate.window.rootViewController获取到当前的window,再获取到当前的rootViewController,再弹出UIAlertController,是会失败的,因为当前的一个控制器不可以重复多次present多个控制器。
所以这个时候,可以重新创建一个window,覆盖在原来的window之上
UIWindow *alertWindow = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
alertWindow.rootViewController = [[UIViewController alloc]init];
alertWindow.windowLevel = UIWindowLevelAlert + 1;
[alertWindow makeKeyAndVisible];
注意事项:某些系统UIAlertController移除之后,window并没有移除,所以需要手动移除:
weakWindow.hidden = YES;
weakWindow = nil;
UIWindow的层级关系:
UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal; //默认,值为0
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert; //值为2000
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar ; // 值为1000