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

时间:2017-03-27 23:45:35

标签: ios swift navigation uitabbarcontroller appdelegate

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

为实现这一目标,我在我的app delegate中尝试了以下代码:

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

它不会移动到任何地方。我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

这就是你需要的。
使用导航控制器推送通知视图控制器

    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()

答案 2 :(得分:0)

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