如何在推送通知中导航到另一个视图控制器

时间:2015-04-30 09:24:21

标签: ios iphone uinavigationcontroller

我正在做一个应用程序。因为我有一些视图控制器,如A-> B,A-> C,A-> D和B-> E,C-> F,D- > G和E-> H,F-> I和G-> J.So我在E视图控制器中,每当通知到来时,我必须移动到G视图控制器。如果我在任何视图中控制器除了G,我需要移动到G视图控制器。所以请告诉我该怎么做。

1 个答案:

答案 0 :(得分:1)

您需要先在AppDelegate.m中设置一些代码,以便在应用程序打开时响应推送:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    //If opening app from notification
    if ( application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground  )
    {
        //restore push
        [[NSNotificationCenter defaultCenter] postNotificationName:@"appRestorePush" object:nil];

    }
    //If app is already open
    else {


        [[NSNotificationCenter defaultCenter] postNotificationName:@"appOpenPush" object:nil];

    }


}

如果应用程序通过推送打开(即您从锁定屏幕上滑动),我们会触发NSNotification,并且如果应用程序已经打开,还会有不同的通知。您不必使用两种不同类型的NSNotification,但它可能对您有用。我不确定你的视图控制器设置是什么,但假设你在根控制器中使用UINavigation控制器,你只需将它设置为在ViewDidLoad中监听,即:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appOpenPush) name:@"appOpenPush" object:nil];

在方法中你可以这样调用:

-(void)appOpenPush {

   NSLog(@"got a push while app was open");
   //Get the view controller

   UIViewController *lastViewController = [[self.navigationController viewControllers] lastObject];
    if([lastViewController isKindOfClass:[MyViewController class]]) {

     //do your segue here

   }

   else if//////do this for all your cases...

}

这里我们检查视图控制器是什么类型的类,然后选择适当的segue。

希望你至少做了一点工作并理解我写的东西..