代码之家  ›  专栏  ›  技术社区  ›  Patrick

如何在推送通知时导航到查看控制器

  •  5
  • Patrick  · 技术社区  · 10 年前

    我想在收到推送通知后导航到某个视图控制器。导航后,导航堆栈应该像用户手动访问视图一样工作。

    故事板: http://www.xpos.nl/xpos/images/common/storyboard.png

    在AppDelegate.swift中,我已经:

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    
        println("didReceiveRemoteNotification")
    
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
    
        let destinationViewController = storyboard.instantiateViewControllerWithIdentifier("MessageViewController") as MessageViewController
    
        let navigationController = self.window?.destinationViewController;
    
        navigationController?.pushViewController(destinationViewController, animated: false, completion: nil)
    
    }
    

    但我得到了一个错误,即destinationViewController不是窗口的一部分,或者如果我纠正了这个错误(在stackoverflow上尝试其他答案),什么都不会发生。

    2 回复  |  直到 10 年前
        1
  •  10
  •   olympia    9 年前

    destinationViewController不是窗口的一部分,因为它尚未添加,只是初始化。基于navigationViewController是rootViewController的假设,按如下方式推送到destinationViewController:

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    
        println("didReceiveRemoteNotification")
    
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
    
        let destinationViewController = storyboard.instantiateViewControllerWithIdentifier("MessageViewController") as MessageViewController
    
        let navigationController = self.window?.rootViewController as! UINavigationController
    
        navigationController?.pushViewController(destinationViewController, animated: false, completion: nil)
    
    }
    

    另外:要从“Bestellen”推送到“MessageViewController”,然后弹出到“Berichten”,还需要在这两个视图控制器之间推送所有其他视图控制器。没有内置的函数或算法可以做到这一点。

        2
  •  2
  •   devang bhatt Ram Vadranam    7 年前

    试试这个

        func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    
        println("didReceiveRemoteNotification")
    
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
    
        let destinationViewController = storyboard.instantiateViewControllerWithIdentifier("MessageViewController") as MessageViewController
    
        self.window?.rootViewController?.presentViewController(destinationViewController, animated: True, completion:nil)
    
        }