通过远程通知从 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的主要内容,如果未能解决你的问题,请参考以下文章