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

你可能感兴趣的:(UIWindow的应用场景)