打开接收推送通知的特定视图

Posted

技术标签:

【中文标题】打开接收推送通知的特定视图【英文标题】:Open specific view on receiving Push Notification 【发布时间】:2011-06-01 07:51:10 【问题描述】:

我有UITableView 作为我的rootViewController,我用解析的RSS 填充该表(有一个Parser 类,我的rootViewController 是它的代表)。在 rootViewController 中,我有刷新 RSS refreshData 的方法,并将检索到的数据保存在静态 MutableArray staticItems 中:

单击tableView 单元格中的单元格时,detailView 会被推送到navigationController,同时(在选择单元格(行)时)我创建字典theItem 并将其传递给@987654332 @。在该字典中,我传递来自staticItemspositionInArray(所选单元格的索引)的值。这样我可以显示新闻的文本并跟踪新闻在新闻数组中的位置以实现幻灯片 prev/next。

现在,我启用了推送通知,并在收到推送通知后,我的应用返回前台,但视图是上次关闭应用时打开的视图。

我想通过重新解析(刷新)RSS 并呈现最新消息(theItem[0]),在 detailView 中呈现最新消息。

所以,我想得到以下结果:调用[rootController refreshData],然后选择单元格中的第一项并在detailView中打开它

我一直在使用委托方法didReceiveRemoteNotification,但我找不到让它工作的方法。我尝试创建新的rootController,但随后将其叠加在现有的之上:(。

请与我分享你的想法:)

【问题讨论】:

@ViTo Brothers Apoyan:我的问题已被编辑(删除了您好,最后谢谢),现在我的斜体不再是斜体了。我是不是格式错了?谢谢 【参考方案1】:

首先,这个问题根本与推送通知无关。更多的是关于如何从应用程序委托中的任意位置访问视图控制器的问题。

您最好(并且可能唯一)的选择是手动保留对相关视图控制器实例的引用。

我假设您使用UINavigationController,其中根是您的列表,然后您将详细视图控制器推到它上面。在您的应用程序委托中保留对此导航控制器的引用。将@property (nonatomic, retain) UINavigationController *mainNavController; 添加到您的应用程序委托。创建导航控制器时,分配它以便应用程序委托具有引用。

MyAppDelegate *ad = ((MyAppDelegate *)[UIApplication sharedApplication].delegate);
ad.mainNavController = theNavController;

如果您在应用程序委托本身中创建导航控制器,您显然只需要这样做:

self.mainNavController = theNavController;

然后当您收到推送通知时,只需直接在导航控制器上操作即可。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

    // Do whatever you need to do in order to create an instance of your
    // detail view controller
    MyDetailViewController *vc = [MyDetailViewController magicalStuff:userInfo];

    // Add the detail view controller to the stack, but keep the root view
    // controller.
    UIViewController *root = self.mainNavController.topViewController;
    NSArray *vcs = [NSArray arrayWithObjects:root, vc, nil];
    [self.mainNavController setViewControllers:vcs animated:YES];

然后导航控制器将通过滑动动画到MyDetailViewController,并且后退按钮会将您带到列表。

【讨论】:

以上是关于打开接收推送通知的特定视图的主要内容,如果未能解决你的问题,请参考以下文章

单击推送通知时如何打开应用程序的特定页面

接收远程推送通知时打开视图控制器

SwiftUI - 当用户打开推送通知时打开特定视图

当用户使用 iOS 13 Swift 5 点击推送通知时,在特定视图中打开应用程序

Xcode 在情节提要中使用推送通知打开特定视图

检测应用程序是不是从推送通知启动/打开,然后将其重定向到特定视图控制器