从AppDelegate中访问NavigationController指向的初始视图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从AppDelegate中访问NavigationController指向的初始视图相关的知识,希望对你有一定的参考价值。
我正在使用Swift 4,我想知道如何从AppDelegate中访问故事板中我的NavigationController指向的初始视图。在这种情况下,我指向的初始视图是HotSpotRISViewController。我需要从AppDelegate中获取HotSpotRISViewController实例,以便我可以将url变量传递给它。我的故事板看起来像这样:
如何从AppDelegate中访问我的hotSpotRISViewController实例?我知道委托及其工作原理,我知道AppDelegate首先启动应用程序,可以用于各种重要事件,例如当应用程序离开前台或在外部打开文本文件时。但是如果我没有任何方法可以访问我当前视图的实例,我无法对这些事件做任何事情,在这种情况下需要HotSpotRISViewController(这也是我的NavigationController指向的初始视图)。我猜我以某种方式使用窗口属性。提前感谢任何能够解答此问题的人。
好吧,经过几个小时的工作,我解决了它。看看我的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的子类,否则您将无法使用在此处创建的任何函数。
以上是关于从AppDelegate中访问NavigationController指向的初始视图的主要内容,如果未能解决你的问题,请参考以下文章
从AppDelegate中访问NavigationController指向的初始视图
从 AppDelegate 访问 View Controller 的属性
UISplitview:从 appDelegate 访问 UITabBarController