从 AppDelegate 调用 navigationController

Posted

技术标签:

【中文标题】从 AppDelegate 调用 navigationController【英文标题】:Call navigationController from AppDelegate 【发布时间】:2018-10-17 08:11:36 【问题描述】:

现在我正在实现一个信号通知,当用户点击通知时我想打开特定的 Viewcontroller。

这是我在 AppDelegate 的代码

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let detailBrand = storyBoard.instantiateViewController(withIdentifier: "PagerOverviewControlerID") as! PagerOverviewControler
detailBrand.getValue = value
navigationController?.pushViewController(detailBrand, animated: true)

如果我将这段代码放在任何 ViewController 类中,它可以正常工作,但在 AppDelegate 中却没有。

请帮忙!!!

【问题讨论】:

【参考方案1】:

嗯,首先你要明白Appdelgate不是UIViewController

因此您不能使用pushViewController(detailBrand, animated: true),因为您并不完全在UIVewController 中能够这样做,但是您可以启动UINavigatetionController 将其设置为您的根,然后从它推送。

你的代码应该是这样的

let rootViewController = self.window!.rootViewController as! UINavigationController
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let profileViewController = mainStoryboard.instantiateViewController(withIdentifier: "PagerOverviewControlerID") as! PagerOverviewControler
rootViewController.pushViewController(profileViewController, animated: true)

还请记住,您应该将其放在 didFinishLaunchWithOption 方法中。

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

【讨论】:

以上是关于从 AppDelegate 调用 navigationController的主要内容,如果未能解决你的问题,请参考以下文章

从 AppDelegate 调用 navigationController

从 AppDelegate 调用委托函数不起作用

如何从appdelegate调用方法[重复]

如何从 AppDelegate 调用在 ViewController 中声明的方法

无法从 AppDelegate 调用 ViewController 方法

AppDelegate 从 m File + presentViewController 调用函数