首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIWindow in SceneDelegate

UIWindow in SceneDelegate
EN

Stack Overflow用户
提问于 2022-10-17 13:22:18
回答 1查看 50关注 0票数 1

最近,我在堆栈溢出中遇到了一个问题,我已经发布了这里。显然,这个错误是因为使用了一个随机的UIWindow变量来显示UI (而不是SceneDelegate中的那个)。

我的理解是--每次创建场景(由用户或应用程序创建)时,都会创建一个UISceneSession来管理一个UIScene,它可以包含一个或多个UIWindows,每个UIWindows都有视图,这些视图在视图控制器的帮助下显示。每个UIScene都将获得一个UISceneDelegate对象来处理其生命周期。

现在,我的以前的职位中的错误是有意义的--因为使用的是随机UIWindow对象,而不是SceneDelegate中的对象。

但我仍然不完全理解为什么UIWindow是由Xcode在SceneDelegate中声明的。在UIWindow中有一个UIWindowSceneDelegate对象(当前SceneDelegate的超类),文档清楚地解释了它是一个与场景相关的窗口。为什么没有使用它,而是在创建项目时由Xcode创建一个新变量?如果我需要另一个窗口,那么我可以将另一个UIWindow对象添加到当前的SceneDelegate中吗?这是个很好的做法吗?

代码语言:javascript
复制
@available (iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
    var window: UIWindow?

    // Remaining methods
}

我是新的快速和iOS应用程序开发-任何帮助填补这些空白将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-17 13:34:49

UIWindowSceneDelegate不是场景委托的超类。这是一项协议。这不是真正的事情。这仅仅是一组指令,告诉编译器采用这个协议意味着什么。您的SceneDelegate类确实采用了UIWindowSceneDelegate协议。因此,它必须声明一个类型为windowUIWindow?属性,并且它这样做了。

此外,该属性是场景委托的窗口;没有它,您将没有窗口,屏幕将是黑色的。实际上,您可以将此属性设置为您自己创建的窗口;但您不必这样做,因此您可能不会费心。您不必这样做,因为框架会自动为您完成场景创建过程的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74098011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档