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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • UIView的功能 负责渲染区域的内容,并且响应该区域内发生的触摸事件 UIWindow 在iOS App中,UI...
    小蘑菇2阅读 830评论 4 5
  • 一、UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow。 iOS程序启动完毕后...
    MrLXQ阅读 1,110评论 0 3
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,739评论 1 14
  • 1.OC里用到集合类是什么? 基本类型为:NSArray,NSSet以及NSDictionary 可变类型为:NS...
    轻皱眉头浅忧思阅读 1,481评论 0 3
  • 在ubuntu16.04 ,php7环境中修改php.ini文件,在/etc/php/7.0/apache2/ph...
    nulldream阅读 989评论 0 0

友情链接更多精彩内容