UIApplication.shared.delegate эквивалент для SceneDelegate xcode11? - PullRequest
1 голос
/ 14 июня 2019

Я определил свойство let в моем SceneDelegate. Мне бы хотелось, чтобы некоторые ViewControllers имели возможность доступа к нему внутри сцены.

В UIKit я мог получить доступ к свойствам делегата приложения, например:

UIApplication.shared.delegate

затем приведение и указание имени свойства ...

Есть ли эквивалент для получения ссылки на SceneDelegate, в котором находится контроллер представления, из экземпляра UIViewController?

1 Ответ

3 голосов
/ 14 июня 2019

Начиная с iOS 13, UIApplication имеет свойство connectedScenes, равное Set<UIScene>.Каждая из этих сцен имеет delegate, что является UISceneDelegate.Таким образом, вы можете получить доступ ко всем делегатам таким образом.

Сцена может управлять одним или несколькими окнами (UIWindow), и вы можете получить UIScene окна из его свойства windowScene.

Если вы хотите делегировать сцену для определенного контроллера представления, обратите внимание на следующее.Из UIViewController вы можете получить его окно из его вида.Из окна вы можете получить его сцену и, конечно, из сцены вы можете получить его делегата.

Короче говоря, из контроллера представления вы можете сделать:

let mySceneDelegate = self.view.window.windowScene.delegate

Это может помочьнаписать небольшое расширение:

extension UIViewController {
    var sceneDelegate: UISceneDelegate? {
        return self.view.window?.windowScene?.delegate
    }
}
...