2016-03-05 97 views
0

我的目標時,如何提出適當的視圖 - 控制與導航堆棧:當用戶通過響應遠程通知啓動應用程序,從遠程通知啓動

  1. 用戶應該用適當的ViewController呈現
  2. 的viewcontroller應該具有與用戶手動訪問viewcontroller時所具有的導航堆棧相同的導航堆棧。

我的配置: enter image description here

  • HomeViewController: UITabBarController是根。每個標籤有UINavigationController
  • ConversationGroupTableViewController: UITableViewController位於第四個選項卡並顯示對話組列表。
  • ConversationGroupDetailViewController: UITableViewControllertableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)加載到ConversationGroupTableViewController中。它顯示該對話組中的消息列表。

示例:通知用戶新郵件已到達。當用戶通過響應遠程通知來啓動應用程序時,應向用戶呈現ConversationGroupDetailViewController的實例,該實例在其導航堆棧中具有ConversationGroupTableViewControllerHomeViewController,以便用戶可以按回按鈕以到達它們。

到目前爲止的代碼: 在AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    let notificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)  
    application.registerUserNotificationSettings(notificationSettings) 
    application.registerForRemoteNotifications() 

    if let notificationDictionary = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary { 
     instantiateViewControllerFromNotification(notificationDictionary) 
    } 
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
} 

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

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

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

我想我移動到正確的軌道,但我似乎無法弄清楚究竟是如何做到這一點。我將不勝感激任何幫助!

編輯: 我已經做了更多的實驗並更新了代碼。這段代碼做我想要的。

回答

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) 
} 
+0

@harfangk你檢查了嗎? – Saood

+0

謝謝你的回答,但我認爲問題不是延遲,而是獲得每個viewcontrollers的正確實例。我得到它的工作和更新代碼。 – Harfangk