从 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 调用在 ViewController 中声明的方法