使用Swift在didReceiveRemoteNotification中呈现特定的视图控制器

时间:2015-04-28 04:06:02

标签: ios xcode swift uiviewcontroller push-notification

当用户点击推送通知时,我希望将它们带到我的应用中的特定表视图控制器。此表视图控制器嵌入在导航控制器中,该控制器嵌入在选项卡栏控制器(我的根视图控制器)中。下面显示的图像显示了这一点。

enter image description here

根视图Tab Bar Controller的故事板ID为“HomeVC”,类名为“HomeViewController”,导航控制器的故事板ID为“SettingsNavigationVC”,而Table View Controller的故事板ID为“SettingsTableVC” “和类名”SettingsNavigationVC“。

我有推送通知正常工作。通过工作,我的意思是我可以从设备发送消息并在另一台设备上接收它,但是当接收器点击通知时,我似乎无法打开除根视图控制器之外的任何其他视图控制器。根据我正在使用的push notification guide,我在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)
    }
}

我做错了什么,或者我该怎样做才能呈现正确的视图控制器?

2 个答案:

答案 0 :(得分:4)

试试这个

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
}

答案 1 :(得分:3)

要推送到特定的视图控制器,您必须替换以下行:

你的:

rootVC?.navigationController?.pushViewController(settingsTableVC, animated: false)
我是:

rootVC?.visibleViewController.navigationController?.pushViewController(settingsTableVC, animated: true)

要呈现任何视图控制器,您必须使用:

rootVC?.visibleViewController.navigationController?.presentViewController(settingsTableVC, animated: false, completion: nil)