Updated
From iOS 13, apps can have multiple active windows, so you need to access the window you want. So you can access a window of any View
like this:
self.view.window
if you really want to access the UISceneDelegate
you can access it like:
self.view.window.windowScene.delegate
Old: and NOT recommended:
Assuming
- there is only one scene delegate.
- There is only one scene and one window.
- All view controllers in the app are all part of that one scene and its window.
You can implement a helper variable in SceneDelegate
like this:
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
}
then you can access it anywhere like this:
SceneDelegate.shared?.window // or anything else
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…