【问题标题】:Swift/iOS13 - Access SceneDelegate window variable in a ViewControllerSwift/iOS13 - 在 ViewController 中访问 SceneDelegate 窗口变量
【发布时间】:2019-10-24 19:21:17
【问题描述】:

是否可以从 ViewController 中的 SceneDelegate 访问窗口变量?基本上我需要这个UIApplication.shared.delegate.window 的替代品,但找不到任何东西

【问题讨论】:

  • 您不需要场景(或应用程序)委托来获取窗口。在视图控制器中,执行self.view.window。

标签: ios swift ios13


【解决方案1】:

更新

从 iOS 13 开始,应用程序可以有多个活动窗口,因此您需要访问所需的窗口。所以你可以像这样访问任何View 的窗口:

self.view.window

如果你真的想要访问UISceneDelegate,你可以像这样访问它:

self.view.window.windowScene.delegate

旧:不推荐:

假设

  1. 只有一个场景代理。
  2. 只有一景一窗。
  3. 应用中的所有视图控制器都是该场景及其窗口的一部分。

您可以像这样在SceneDelegate 中实现一个辅助变量:

private(set) static var shared: SceneDelegate?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    guard let _ = (scene as? UIWindowScene) else { return }
    Self.shared = self
}

然后你可以像这样在任何地方访问它:

SceneDelegate.shared?.window // or anything else

【讨论】:

  • SceneDelegate.shared?.window 只有当你只有一个场景不适合场景时才酷?
猜你喜欢
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
相关资源
最近更新 更多