[英]How to present appropriate viewcontroller with navigation stack when launching from remote notification
我的目標:當用戶通過響應遠程通知啟動應用程序時,
HomeViewController: UITabBarController
是根。 每個選項卡都有UINavigationController
。 ConversationGroupTableViewController: UITableViewController
在第四個選項卡上,顯示對話組列表。 ConversationGroupDetailViewController: UITableViewController
從加載tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
在ConversationGroupTableViewController
。 它顯示該對話組中的消息列表。 示例情況:通知用戶新消息已到達。 當用戶通過響應遠程通知啟動應用程序時,應向用戶顯示一個ConversationGroupDetailViewController
實例,該實例在其導航堆棧中具有ConversationGroupTableViewController
和HomeViewController
,以便用戶可以按后退按鈕來訪問它們。
到目前為止的代碼:在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)
}
我認為我正在朝正確的方向前進,但是我似乎無法確切地知道如何做到這一點。 我將不勝感激任何幫助!
編輯:我做了更多的實驗並更新了代碼。 這段代碼實現了我想要的功能。
@哈方克
延遲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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.