Is it possible to access window variable from SceneDelegate in a ViewController? Basically I need an alternative for this UIApplication.shared.delegate.window
but can't find anything
Asked
Active
Viewed 1.2k times
13

kironet
- 766
- 2
- 11
- 27
-
2You don't need the scene (or app) delegate to get the window. From a view controller, do `self.view.window`. – rmaddy Oct 24 '19 at 20:11
1 Answers
27
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

Community
- 1
- 1

Mojtaba Hosseini
- 95,414
- 31
- 268
- 278
-
2`SceneDelegate.shared?.window` it's cool only if you have only ONE scene which is not natural for scenes – imike Apr 05 '20 at 14:43