Доступ из AppDelegate исходного представления, на которое указывает NavigationController - PullRequest
0 голосов
/ 09 мая 2018

Я использую Swift 4, и мне интересно, как получить доступ из AppDelegate к исходному представлению, на которое указывает мой NavigationController в раскадровке. В этом случае мой первоначальный взгляд, на который он указывает, - HotSpotRISViewController. Мне нужен мой экземпляр HotSpotRISViewController из AppDelegate, чтобы я мог передать ему переменную url. Моя раскадровка выглядит так: enter image description here

Как получить доступ к моему экземпляру hotSpotRISViewController из AppDelegate? Я знаю о делегировании и о том, как оно работает, и я понимаю, что AppDelegate запускает приложение в первую очередь и может использоваться для всех видов важных событий, таких как когда приложение покидает передний план или открывает текстовый файл извне. Но я ничего не могу сделать с этими событиями, если у меня нет никакого способа получить доступ к экземпляру моего текущего представления, которое в этом случае должно быть HotSpotRISViewController (что опять же является начальным представлением, на которое указывает мой NavigationController). Я предполагаю, что я использую свойство окна как-то. Заранее благодарю всех, кто может ответить на этот вопрос.

1 Ответ

0 голосов
/ 09 мая 2018

Хорошо, после нескольких часов работы я решил это.Загляните внутрь моего AppDelegate:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    if let hotSpotRISViewController = UIApplication.shared.keyWindow?.rootViewController?.childViewControllers[0] as? HotSpotRISViewController {
        hotSpotRISViewController.setURL(theURL: url)
    }
}

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

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    if let hotSpotRISViewController = app.keyWindow?.rootViewController?.childViewControllers[0] as? HotSpotRISViewController {
        hotSpotRISViewController.setURL(theURL: url)
    }
}

Разница в том, что вместо использования UIApplication.shared.keyWindow, вы используете app.keyWindow, который кажется лучше, так как app является единственным приложением вашего приложения и передается в качестве аргумента этой функции.

Надеюсь, из этого примера кто-нибудь еще столкнулся с этой проблемойможет получить хорошее представление о том, что нужно, чтобы найти правильный ViewController.Не забудьте привести его к вашему подклассу ViewController, иначе вы не сможете использовать ни одну из функций, которые вы там сделали.

...