启动特定的viewController响应远程推送通知

问题描述:

我创建一个应用程序是谁的故事板流像下面的图片:启动特定的viewController响应远程推送通知

storyboard

当从“Sysalert视图控制器”他们是在用户登录带入“消息列表视图控制器”,我做一个NSURLConnection加载一些JSON到表中。当用户点击表中的一行时,它们被带入“消息详细信息”中,该消息显示了该消息的更详细信息。

当用户从一个推送通知下水前启动应用程序,无论应用程序的状态,我想该应用从我的服务器加载“邮件列表”的数据,然后告诉他们这只是得到了消息推送到设备。

我知道我需要使用didFinishLaunchingWithOptions来告诉应用程序对推送通知做出反应,但是如何设置视图层次结构以便“消息列表”视图控制器加载其数据,然后按下“消息详细信息”视图控制器放入堆栈以获取适当的消息?

基本上这种模仿邮件或邮件应用程序的行为。使用通知进行打开会将您带到视图控制器中,但您仍然可以像层次结构一样从初始viewController启动应用程序并依次遍历viewControllers。

+0

的一个使用@conorgrifinhave你有答案吗?我有同样的问题..感谢 – 2014-03-24 08:04:03

+0

可能重复的[iOS的Swift从推送通知以编程方式导航到某些ViewController](https://*.com/questions/43058261/ios-swift-navigate-to-certain-viewcontroller-programmatically -from-push-notifica) – 2017-12-18 13:24:34

可以做你所描述的,但我不会推荐它。

弗里斯特将与您在故事板所需的视图断开的视图控制器,给视图控制器的标识,像“我的推送通知查看”

didFinishLaunchingWithOptions:,你可以从RootViewController的应用程序代表。该控制器将成为导航控制器。使用导航控制器,您可以在堆栈顶部推送新的视图控制器。要创建新的视图控制器,请使用标识符“我的推送通知视图”实例化视图控制器。

UINavigationController *navController = (UINavigationController *)self.window.rootViewController; 
UIViewController *notificationController = [navController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"]; 

[navController pushViewController:notificationController animated:YES]; 

我想你会想使用类似-presentViewController:animated:completion:显示一个模式的看法,而不是中断导航堆栈。

UIViewController *rootController = (UIViewController *)self.window.rootViewController; 
UIViewController *notificationController = [rootController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"]; 

[rootController presentViewController:notificationController animated:YES completion:NULL]; 
+0

我在didFinishLauncingWithOption中的ios 7中实现了它,每次应用程序打开时它都被触发并打开。如果推送通知进入和/或如果应用程序已关闭,并且推送通知进入 – 2014-06-09 04:36:57

试试这个,我在我的应用程序,用户在应用程序委托作为全球

ex: BOOL gotNotifcation; 

-(void)application:(UIApplication*)app didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    NotificationsViewController *notificationobject = [[NotificationsViewController alloc]init]; 
    [self.navigationController pushViewController:notificationobject animated:YES]; 
    gotNotifcation = YES; 
} 

在NotificationsViewController的后退按钮动作的变量,如果它是定制的按钮

-(void)gotoback 
{ 
    AppDelegate *delegate =(AppDelegate *)[UIApplication sharedApplication].delegate; 

    if(delegate.gotNotifcation) 
    { 
     delegate.gotNotifcation = NO; 
     MessageListController *feed = [[MessageListController alloc] init]; 
     [self.navigationController pushViewController:feed animated:NO]; 
    } 
    else 
    { 
     [self.navigationController popViewControllerAnimated:NO]; 
    } 
} 
+0

,您可以更新swift 3中的代码@Charan Giri – 2017-09-27 05:08:14