Swift/iOS13 - Access SceneDelegate window variable in a ViewController

前端 未结 1 677
青春惊慌失措
青春惊慌失措 2020-12-16 17:10

Is it possible to access window variable from SceneDelegate in a ViewController? Basically I need an alternative for this UIApplication.shared.delegate.window b

相关标签:
1条回答
  • 2020-12-16 17:42

    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

    1. there is only one scene delegate.
    2. There is only one scene and one window.
    3. 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
    
    0 讨论(0)
提交回复
热议问题