【从AppDelegate中访问NavigationController指向的初始视图】愿君学长松,慎勿作桃李。这篇文章主要讲述从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的子类,否则您将无法使用在此处创建的任何函数。
推荐阅读
- UINavigationController appDelegate UIViewController以编程方式
- 是否可以在不使用继承的情况下在viewDidAppear上调用某些代码
- UIViewController viewDidLoad vs. viewWillAppear(什么是适当的分工())
- Swift - 从viewController访问AppDelegate窗口
- mcapply(所有计划的核心在用户代码中遇到错误)
- Android studio ConstraintLayout大小调整问题
- 使用具有目的为“ android.rfid.INPUT”的意图的sendBroadcast
- App Engine模块之间的快速通信方式
- Unity IAP在Apple Testflight中不起作用