从远程通知启动时如何使用导航堆栈呈现适当的viewcontroller

时间:2016-03-05 07:21:16

标签: ios swift uiviewcontroller

我的目标:当用户通过回复远程通知启动应用时,

  1. 应向用户呈现适当的viewcontroller
  2. viewcontroller应该具有与用户手动访问它时viewcontroller所具有的导航堆栈相同的导航堆栈。
  3. 我的配置: enter image description here

    • HomeViewController: UITabBarController是根。每个标签都有UINavigationController
    • ConversationGroupTableViewController: UITableViewController位于第四个标签页,显示对话组列表。
    • ConversationGroupDetailViewController: UITableViewController已从tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) ConversationGroupTableViewController加载。它显示该对话组中的消息列表。

    示例案例:通知用户新消息已到达。当用户通过响应远程通知启动应用时,应向用户显示其导航堆栈中包含ConversationGroupDetailViewControllerConversationGroupTableViewController的{​​{1}}实例,以便用户可以按下按钮来达到他们。

    到目前为止

    代码: 在HomeViewController

    AppDelegate.swift

    我认为我正在走上正轨,但我似乎无法弄明白该如何做到这一点。我将不胜感激任何帮助!

    编辑: 我做了更多的实验并更新了代码。这段代码完成了我想要的。

1 个答案:

答案 0 :(得分:0)

@Harfangk

延迟1秒后调用此方法。因为你在启动应用程序时正在推动控制器。

func instantiateViewControllerFromNotification(notificationDictionary: NSDictionary) {
  let storyboard = UIStoryboard(name: "Main", bundle: nil)
  let initialViewController = storyboard.instantiateInitialViewController() as! UITabBarController
  initialViewController.selectedIndex = 3

  let navigationController = storyboard.instantiateInitialViewController().viewControllers![3] as! UINavigationController
  let tableViewController = storyboard.instantiateViewControllerWithIdentifier("ConversationGroupTableViewController") as! ConversationGroupTableViewController
  let detailViewController = storyboard.instantiateViewControllerWithIdentifier("ConversationGroupDetailViewController") as! ConversationGroupDetailViewController

  navigationController.pushViewController(tableViewController, animated: false) 
  navigationController.pushViewController(detailViewController, animated: false)
}