iOS Swift通过推送通知以编程方式导航到某个ViewController

我使用推送通知来通知用户有关应用中发生的不同types的事件。 某种types的推送通知应该打开一个特殊的视图控制器(通知点击一个新的聊天消息导航到聊天)

为了实现这一点,我尝试了我的应用程序委托下面的代码:

func applicationDidBecomeActive(_ application: UIApplication) { if var topController = UIApplication.shared.keyWindow?.rootViewController { while let presentedViewController = topController.presentedViewController { topController = presentedViewController } topController.tabBarController?.selectedIndex = 3 } } 

它不会移动到任何地方。 我在这里错过了什么?

我写了一个简单的类,通过传递类的types,从一行代码中的任意位置导航到视图层次结构中的任何视图控制器,因此您编写的代码也将与视图层次本身解耦,例如:

 Navigator.find(MyViewController.self)?.doSomethingSync() Navigator.navigate(to: MyViewController.self)?.doSomethingSync() 

..或者你也可以在主线程上asynchronous执行方法:

 Navigator.navigate(to: MyViewController.self) { (MyViewControllerContainer, MyViewControllerInstance) in MyViewControllerInstance?.doSomethingAsync() } 

这里是GitHub项目链接: https : //github.com/oblq/Navigator

在这种情况下,topController已经是我的TabBarController了!