4

我收到推送通知并根据推送中获得的数据推送视图控制器。我这样做:

   UINavigationController *navVc=(UINavigationController *) self.window.rootViewController;
   PictureTakeVC *pvc=[[PictureTakeVC alloc] init];
   [navVc pushViewController:pvc animated:NO];

它可以工作,但是在我按下主页按钮之前打开的视图控制器会显示片刻。

我也试过这个,但它发生了同样的情况:

PictureTakeVC *pvc=[[PictureTakeVC alloc] init];            
NSArray *vcs=[[NSArray alloc] initWithObjects: pvc, nil];
UINavigationController *navVc=(UINavigationController *) self.window.rootViewController;
navVc.viewControllers=vcs;
self.window.rootViewController = navVc;

如何推送 vc didReceiveRemoteNotification 使其立即打开并且暂时不显示其他 vc?

4

4 回答 4

3

正如您所说“但是在我按下主页按钮之前打开的视图控制器会显示片刻。”,

原因不是代码,而是iOS系统。当应用程序进入后台时,它会捕获屏幕截图。据记载

在移至后台之前从视图中删除敏感信息。当应用程序转换到后台时,系统会拍摄应用程序主窗口的快照,然后在将应用程序转换回前台时简要显示该快照。在从 applicationDidEnterBackground: 方法返回之前,您应该隐藏或隐藏可能作为快照一部分捕获的密码和其他敏感个人信息。

因此,如果快照被删除,那么它将直接显示新推送的视图控制器。(不确定苹果的快照指南)

更新:

applicationDidEnterBackground一种方法可以是:当应用程序屏幕进入背景时(在方法中),在应用程序屏幕上添加黑色背景。因此,它会在返回应用程序时显示黑屏。{他们存储它以显示已启动应用程序的启动图像。}

它在哪里有帮助?

当我们从应用程序沙箱的“首选项”目录中删除快照(应用程序进入后台后)并返回应用程序时,它会显示一段时间,因为它没有任何快照。

我们的方法和删除快照的结果是相同的。

于 2012-08-17T11:40:24.580 回答
1

由于PictureTakeVC是视图控制器,因此请改用它

 PictureTakeVC *pvc = [[PictureTakeVC alloc] initWithNibName:@"PictureTakeVC" bundle:nil];
 [self.navigationController pushViewController:pvc animated:YES];
于 2012-08-10T13:52:08.530 回答
1

在您的应用程序进入后台模式之前,请删除那里的视图。

于 2012-08-10T14:40:55.397 回答
1

你错过了什么吗?当didReceiveRemoteNotification您的应用程序处于活动状态并正在运行时触发。

...但无论如何,如果你想实现你所要求的,你必须检测来自didFinishLaunchingWithOptions(或可能来自applicationDidBecomeActiveor applicationWillEnterForeground)的推送通知,并从这些方法之一将视图控制器推送到 rootviewcontroller 上。

检测是否有远程通知:

NSString *params = [[launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"] objectForKey:@"View"];
if (params) 
{
    // push view
}

使用以下方法推送视图,当应用程序被激活时,您将看不到任何其他 vc。让我知道是否有任何问题。

- (void)applicationWillEnterForeground:(UIApplication *)application
{
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
}

我已经为推送通知做了类似的事情,所以如果我理解错误,请告诉我你想要达到什么目的。

于 2012-08-13T10:16:07.763 回答