【发布时间】:2019-10-24 19:21:17
【问题描述】:
是否可以从 ViewController 中的 SceneDelegate 访问窗口变量?基本上我需要这个UIApplication.shared.delegate.window 的替代品,但找不到任何东西
【问题讨论】:
-
您不需要场景(或应用程序)委托来获取窗口。在视图控制器中,执行
self.view.window。
是否可以从 ViewController 中的 SceneDelegate 访问窗口变量?基本上我需要这个UIApplication.shared.delegate.window 的替代品,但找不到任何东西
【问题讨论】:
self.view.window。
从 iOS 13 开始,应用程序可以有多个活动窗口,因此您需要访问所需的窗口。所以你可以像这样访问任何View 的窗口:
self.view.window
如果你真的想要访问UISceneDelegate,你可以像这样访问它:
self.view.window.windowScene.delegate
假设
您可以像这样在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 只有当你只有一个场景不适合场景时才酷?