推送通知:从 AppDelegate 导航到 ViewController

Posted

技术标签:

【中文标题】推送通知:从 AppDelegate 导航到 ViewController【英文标题】:Push Notifications: Navigate to a ViewController from the AppDelegate 【发布时间】:2015-04-21 11:09:26 【问题描述】:

目前,我正在通过添加推送通知来优化我目前正在开发的 ios 应用程序。这些推送通知会发送给人们,以通知他们在应用程序内要采取行动。

我目前正在努力实现“当您在应用程序内并收到通知时”-部分:ReceivedRemoteNotification

现在,由于这个方法需要在 AppDelegate 内部实现,我没有办法只说NavigationController.PushViewController (viewController, true);。创建新的 NavigationController 不起作用。

所以,现在我想知道:有没有办法获取已初始化的NavigationController(因为我已经打开了应用程序),以便我可以使用PushViewController 方法?

或者还有其他方法可以从 AppDelegate 中导航到 ViewController

【问题讨论】:

当您收到推送通知时,您能否尝试从 APPDelegate 发送 NSNotification 并在当前控制器(或 NavigationController)中观察并进行推送? 【参考方案1】:

在 Xamarin/C# 中,您的应用的根视图控制器是:

UIViewControler rootViewController = this.window.RootViewController;

从 AppDelegate 中的 FinishedLaunching 覆盖来看,这应该看起来很熟悉。从那里您应该能够导航视图层次结构以将您的用户带到正确的位置。

【讨论】:

不幸的是,RootViewController 是一个自定义控制器,其中有 4 个 NavigationController。我无法确定我当前在哪个 NavigationController 中工作。 即使是自定义控制器,您也可以从 rootViewController 转换为您的自定义类型,然后在其中创建方法以允许您为所欲为。因此,如果您的推送通知需要在您的客户控制器中的第二个导航控制器上显示某个屏幕,您应该能够在自定义控制器上创建一个方法来做到这一点。 啊,我明白了!是的,这是我从未想过的事情!谢谢!【参考方案2】:

尝试使用此方法获取对应用中根控制器的引用

(希望它是您正在寻找的导航控制器):

//////////////AppDelegate.m

UINavigationController *currentNavController = (UINavigationController*)self.window.rootViewController

【讨论】:

以上是关于推送通知:从 AppDelegate 导航到 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

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

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

在接收推送通知时,点击事件应用程序在导航后崩溃

如果 UITabbarcontroller 不是 rootviewcontroller,如何从 Appdelegate 为 UIBarButtonItem 设置徽章(无论何时推送通知)?

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

如何将数据从 appdelegate 传递到视图控制器?