通过远程通知从 AppDelegate 推送到 UINavigationController

Posted

技术标签:

【中文标题】通过远程通知从 AppDelegate 推送到 UINavigationController【英文标题】:Push to UINavigationController from AppDelegate via remote notification 【发布时间】:2015-04-01 17:50:30 【问题描述】:

我的初始视图控制器是一个选项卡栏控制器,在选项卡控制器中有几个 UINavigationControllers,在其中一个 UINavigationControllers 中呈现一个模式,其中另一个 UINavigationController 是使用另一个 UIViewControllers 流创建的。

我需要通过推送到视图层次结构的“最深”部分之一来响应 App Delegate 中收到的远程通知。

我可以重新创建一个 UINavigationController 并按名称启动正确的 UIViewController,但是它会让用户感到兴奋和干燥,没有其他地方可去。

有没有办法让用户回到正确的导航流程?

【问题讨论】:

【参考方案1】:

在我的 App Delegate 的 didReceiveRemoteNotification 方法中,我的工作方式:

let rootTabbarController = self.window?.rootViewController as UITabBarController

let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

let firstNavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("firstNavVc") as UINavigationController

rootTabbarController.viewControllers![0] = firstNavigationController

let vControllerForFirstNavController = (rootTabbarController.viewControllers![0] as UINavigationController).topViewController as MainViewController

let firstDetailsNavController = mainStoryboard.instantiateViewControllerWithIdentifier("detailsNavController") as MainDetailsMenuNavigationController

let detailsVc = firstDetailsNavController.topViewController as MainDetailsViewController

firstNavigationController.presentViewController(firstDetailsNavController, animated: false, completion: nil)

let specificInfoVc = mainStoryboard.instantiateViewControllerWithIdentifier("sDetails") as SpecificDetailsViewController

firstDetailsNavController.pushViewController(specificInfoVc, animated: true)

【讨论】:

只是一个简短的说明,在我的 applicationWillResignActive 方法中,我必须将根窗口设置为我上面使用的第一个选项卡栏控制器 - 如果用户离开应用程序几级深但是这样点击应用外部的通知,应用现在将处于第一级

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

Firebase 远程通知未收到?

通知后,从应用程序委托将视图控制器推送到选项卡栏中

使用 AFNetworking 将 Firebase 通知从 ios 设备推送到花药

从 php 推送到 GCM/APN 的最佳实践

Git学习——把文件推送到远程仓库

在自己的服务器上搭建git仓库服务器(本地推送到远程仓库远程仓库推送到本地)