如何导航到推送通知上的视图控制器

Posted

技术标签:

【中文标题】如何导航到推送通知上的视图控制器【英文标题】:How to navigate to view controller on push notification 【发布时间】:2015-03-26 08:55:49 【问题描述】:

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

故事板: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 不是窗口的一部分,或者如果我更正了该错误(在*** 上尝试其他答案),则什么也没有发生。

【问题讨论】:

您的destinationViewController 来自哪里?没有这样的属性 【参考方案1】:

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】:

试试这个

    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)

    

【讨论】:

以上是关于如何导航到推送通知上的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

当用户点击推送通知时导航到特定的视图控制器

如何通过推送通知显示带有 TabBarController 导航的视图控制器

点击带有 Reveal 的推送通知导航到特定视图

单击推送通知时,正确重定向到选项卡栏导航控制器内的视图控制器

OneSignal 按下推送通知去一个视图控制器 iOS Swift

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