xcode 使用 Swift 在 didReceiveRemoteNotification 中显示特定的视图控制器

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29910129/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 07:05:05  来源:igfitidea点击:

Present specific view controller in didReceiveRemoteNotification with Swift

iosxcodeswiftuiviewcontrollerpush-notification

提问by Aaron

When a user taps a push notification, I want them to be taken to a specific table view controller in my app. This table view controller is embedded in a navigation controller, which is embedded in a tab bar controller (my root view controller). The image shown below visualizes this.

当用户点击推送通知时,我希望它们被带到我的应用程序中的特定表视图控制器。这个表视图控制器嵌入在导航控制器中,导航控制器嵌入在标签栏控制器(我的根视图控制器)中。下图显示了这一点。

enter image description here

在此处输入图片说明

The root view Tab Bar Controller has a storyboard ID of "HomeVC" and a class name of "HomeViewController", the Navigation Controller has a storyboard ID of "SettingsNavigationVC", and the Table View Controller has a storyboard ID of "SettingsTableVC" and a class name of "SettingsNavigationVC".

根视图标签栏控制器的故事板 ID 为“HomeVC”,类名称为“HomeViewController”,导航控制器的故事板 ID 为“SettingsNavigationVC”,表视图控制器的故事板 ID 为“SettingsTableVC”和一个“SettingsNavigationVC”的类名。

I have push notifications working. By working, I mean I can send a message from a device and receive it on another device, but when the receiver taps the notification I can't seem to get any other view controller to open other than the root view controller. According to the push notification guideI'm using, I'm using the following code in the didReceiveRemoteNotificationmethod:

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

What am I doing wrong, or what must I do to present the right view controller?

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

回答by flizana

Try this

尝试这个

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
}

回答by Sohil R. Memon

In order to push to the specific view controller, you must replace below line:

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

Yours:

你的:

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

Mine:

矿:

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

And for presenting any view controller, you must use this:

为了呈现任何视图控制器,你必须使用这个:

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