Swift / iOS13 - доступ к переменной окна SceneDelegate в ViewController - PullRequest
2 голосов
/ 24 октября 2019

Возможно ли получить доступ к переменной окна из SceneDelegate в ViewController? В основном мне нужна альтернатива для этого UIApplication.shared.delegate.window, но я ничего не могу найти

1 Ответ

4 голосов
/ 24 октября 2019

Обновлено

Из iOS 13 , приложения могут иметь несколько активных окон, поэтому вам нужно получить доступ к нужному окну. Таким образом, вы можете получить доступ к окну любого View, например:

self.view.window

, если вы действительно хотите получить доступ к UISceneDelegate, вы можете получить к нему доступ:

self.view.window.windowScene.delegate

Старый: и НЕ рекомендуется:

Предполагая, что

  1. есть только один делегат сцены.
  2. Есть только одна сценаи одно окно.
  3. Все контроллеры представления в приложении являются частью этой одной сцены и ее окна.

Вы можете реализовать вспомогательную переменную в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...