如何在didReceiveRemoteNotification中推送新的视图控制器,以便以前的视图控制器暂时不显示?

时间:2012-08-10 13:30:04

标签: iphone objective-c uiviewcontroller uinavigationcontroller push-notification

我收到一个pust通知,并根据我推送的数据推送一个视图控制器。 我是这样做的:

   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?

3 个答案:

答案 0 :(得分:1)

由于PictureTakeVC是一个视图控制器,所以只需使用它

 PictureTakeVC *pvc = [[PictureTakeVC alloc] initWithNibName:@"PictureTakeVC" bundle:nil];
 [self.navigationController pushViewController:pvc animated:YES];

答案 1 :(得分:1)

在您的应用进入后台模式之前,请移除该处的视图。

答案 2 :(得分:1)

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

...但无论如何,如果你想实现你所要求的,你必须检测到来自didFinishLaunchingWithOptions(或者可能来自applicationDidBecomeActiveapplicationWillEnterForeground)的推送通知并推送rootviewcontroller上的viewcontroller来自其中一种方法。

检测是否有远程通知:

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

使用以下方法推送视图,当应用程序被激活时,您将看不到任何其他vc。如果有任何问题,请告诉我。

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

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

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