Как получить rootViewController с мультиокном iPadOS (SceneDelegate)? - PullRequest
2 голосов
/ 09 июля 2019

Я использую Xcode 11 (бета3) и создаю приложение для iOS 13. В моем проекте я создал методы делегата для UIWindowSceneDelegate, объявив его в Info.plist. Теперь я могу создать несколько окон (и UIScene).

Как я могу получить доступ к rootViewController теперь у меня больше нет ни одного окна? Мне нужно, чтобы получить некоторую ссылку на объекты и границы, которые он содержит.

В моем AppDelegate window is nil и в моем экземпляре ViewController (дочерний контроллер представления) я пытался использовать self.view.window.rootViewController, но я обнаружил, что viewDidLoad() слишком рано (я думаю), и окно все еще равно нулю, работает в viewDidAppear(), но мне не нужно выполнять этот процесс каждый раз, когда появляется контроллер представления.

Как лучше всего использовать этот новый способ обработки сцен приложений?

Вот мой AppDelegate:

func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
        return true
    }

    func application(_ application: UIApplication,
                     configurationForConnecting connectingSceneSession: UISceneSession,
                     options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

Моя СценаДелегат:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // yes it's empty, I'm using storyboard
    }

1 Ответ

0 голосов
/ 17 июля 2019

Вы можете получить доступ к подключенным сценам через

UIApplication.shared.connectedScenes

Согласно документации Apple

Подключенные сцены - это те, которые находятся в памяти и потенциально могут быть активнымиРабота.Подключенная сцена может быть на переднем плане или на заднем плане, а также на экране или за ее пределами.

Затем вы можете пройтись по ним и попытаться получить оттуда UIWindowScene.

guard let windowScene = (scene as? UIWindowScene) else { return }

print(windowScene.windows) // this will print windows associated with the scene.

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

self.view.window
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...