用swift在didReceiveRemoteNotification中呈现特定的视图控制器
当用户点击一个推送通知,我希望他们被带到我的应用程序中的特定表视图控制器。 这个表格视图控制器embedded在一个导航控制器中,该控制器embedded在标签栏控制器(我的根视图控制器)中。 下图显示了这一点。
根视图选项卡栏控制器具有“HomeVC”的故事板ID和“HomeViewController”的类名,导航控制器具有“SettingsNavigationVC”的故事板ID,并且表视图控制器具有“SettingsTableVC”的故事板ID和类名“SettingsNavigationVC”。
我推送通知工作。 通过工作,我的意思是我可以从一个设备发送消息,并在另一个设备上接收它,但是当接收器点击通知时,我似乎无法得到任何其他视图控制器打开比根视图控制器。 根据我使用的推送通知指南 ,我在didReceiveRemoteNotification
方法中使用了以下代码:
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject: AnyObject]) { let rootVC = self.window!.rootViewController if PFUser.currentUser() != nil { let settingsTableVC = SettingsTableViewController() rootVC?.navigationController?.pushViewController(settingsTableVC, animated: false) } }
我做错了什么,或者我该做什么来呈现正确的视图控制器?
尝试这个
let storyboard = UIStoryboard(name: "YourStoryboardName", bundle: nil) let rootVC = storyboard.instantiateViewControllerWithIdentifier("HomeVC") as! UITabBarController if PFUser.currentUser() != nil { rootVC.selectedIndex = 2 // Index of the tab bar item you want to present, as shown in question it seems is item 2 self.window!.rootViewController = rootVC }
为了推到特定的视图控制器,你必须replace下面的行:
你:
rootVC?.navigationController?.pushViewController(settingsTableVC, animated: false)
矿:
rootVC?.visibleViewController.navigationController?.pushViewController(settingsTableVC, animated: true)
而为了呈现任何视图控制器,你必须使用这个:
rootVC?.visibleViewController.navigationController?.presentViewController(settingsTableVC, animated: false, completion: nil)