美文网首页
iOS14 SceneDelegate创建window keyW

iOS14 SceneDelegate创建window keyW

作者: 球球ol | 来源:发表于2020-04-17 16:58 被阅读0次

    xcode更新到11之后,使用iOS13 SDK创建的项目会有一个SceneDelegate类,这个类分担了以前appDelegate中UI的相关操作,对应的,创建window指定根视图控制器的方法也有了一些变化
    一般情况下,指定完根视图控制器,并显示控制器的视图如下图


    图1.png

    然而大部分app新版本发布,启动的时候会显示引导页面,如上图所示,如果需要显示GuideViewController,那就把根视图控制器指定为GuideViewController,然后用户点击跳转的话,再进入app主界面,如下图


    图2.gif
    问题就出在。。我在GuideViewController中想要获得keyWindow,该怎么做呢?我百度了好久,oc的写法大家出奇的一致,我也不知道你们只是搬运工,还是亲自测试了
    
      UIWindow* window = nil;
     
            if (@available(iOS 13.0, *))
            {
                for (UIWindowScene* windowScene in [UIApplication sharedApplication].connectedScenes)
                {
                    if (windowScene.activationState == UISceneActivationStateForegroundActive)
                    {
                        window = windowScene.windows.firstObject;
     
                        break;
                    }
                }
            }else{
                window = [UIApplication sharedApplication].keyWindow;
            }
    

    然后有些小伙伴去试了试发现不好使,把first换成了last,然后贴一个官方文档的截图,然后勾选中图中的last,如下图

    图3.png
    图片出处
    我想问一下。。你确定知道这句话是啥意思么?人家只是告诉你windows数组里面,后添加的在最上面,那句话说了keyWindow是最后一个了?
    然后我自己亲自测试了一下,我专门把设置根视图控制器的window加了一个tag,tag=1001,如下图:
    图4.png
    如图显示,我们所说的keyWindow应该是第2个windows[1]
    所以从这个测试结果上看。。既不是first也不是last,但是我也搞不清楚为啥是第2个,我把Demo传到github
    上,有兴趣看看的小伙伴自己下载跑一下,接受任何技术上的轰炸,我只想搞清楚究竟keyWindow到底去哪了

    tips:我默认认为keyWindow就是管理根视图控制器的那个window


    2020年9月18日更新
    获取keyWindow

    + (UIWindow *)getRootWindow {
    
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(UIWindow *window in [windows reverseObjectEnumerator]) {
            if ([window isKindOfClass:[UIWindow class]] &&
                window.windowLevel == UIWindowLevelNormal &&
                CGRectEqualToRect(window.bounds, [UIScreen mainScreen].bounds))
                return window;
        }
        return [UIApplication sharedApplication].keyWindow;
    }
    

    相关文章

      网友评论

          本文标题:iOS14 SceneDelegate创建window keyW

          本文链接:https://www.haomeiwen.com/subject/wqhyvhtx.html