我使用推送通知来通知用户应用程序中发生的不同类型的事件。某种类型的推送通知应该打开一个特殊的视图控制器(例如,有关新聊天消息的通知确实在单击时导航到聊天(
为此,我在应用程序委托中尝试了以下代码:
func applicationDidBecomeActive(_ application: UIApplication) {
if var topController = UIApplication.shared.keyWindow?.rootViewController {
while let presentedViewController = topController.presentedViewController {
topController = presentedViewController
}
topController.tabBarController?.selectedIndex = 3
}
}
它不会在任何地方移动。我在这里错过了什么?
我编写了一个简单的类,只需传递类类型即可从一行代码中的任何位置导航到视图层次结构中的任何视图控制器,因此您将编写的代码也将与视图层次结构本身分离,例如:
Navigator.find(MyViewController.self)?.doSomethingSync()
Navigator.navigate(to: MyViewController.self)?.doSomethingSync()
..或者您也可以在主线程上异步执行方法:
Navigator.navigate(to: MyViewController.self) { (MyViewControllerContainer, MyViewControllerInstance) in
MyViewControllerInstance?.doSomethingAsync()
}
这是GitHub项目链接:https://github.com/oblq/Navigator
这就是你需要的。
使用导航控制器推送通知视图控制器
let mainStoryBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController : UINavigationController = mainStoryBoard.instantiateViewController(withIdentifier: "MainNavigationController") as! UINavigationController
let notifcontrol : UIViewController = (mainStoryBoard.instantiateViewController(withIdentifier: "NotificationViewController") as? NotificationViewController)!
navigationController.pushViewController(notifcontrol, animated: true)
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
在这种情况下,topController 已经是我的 TabBarController 了!