1

我有一个接收推送通知的应用程序。

在我的故事板中,我有一个标签栏控制器,它有 4 个详细视图(嵌入了导航控制器)。

当我收到推送时,我可以设置正确的标签栏控制器。但我想把整条线都放到我的详细视图中。

NSString *storyboardId = @"TabFirst";
self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:storyboardId];
UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController;
tabBar.selectedIndex = 2;

有了这个,我得到了正确的标签视图。但是我怎样才能将它推送到正确的细节视图呢?而且我还需要用它发送一个对象(这样它就可以显示正确的数据)。

谢谢。

4

1 回答 1

0

我认为您还没有正确理解 UINavigationBarController。它就像一个堆栈,您可以在其中推送和弹出元素。

是否有可能将第 8 个元素直接推入堆栈,而没有堆栈中的前 7 个元素?

您需要创建每个视图控制器的实例并通过您的算法手动推送它。

-(void)didReciveRemoteNotification{

    [tabBarController.viewcontroller objectAtIndex:2/*导航控制器的索引*/];
    // 一旦你获得了对导航的引用,你必须推送你的根视图控制器并调用
    // 在每个执行转换的视图控制器上调用消息。
    UITableViewController *tableVC = [[UITableViewController alloc] init];
    [self.navigationController pushViewController:tableVC];

    // 只需一条消息即可触发您的事件,并让每个视图
    // 控制器加载它连续的视图控制器。


    [tableVC didSelectRowAtIndex .. ];

}

这也将加载您的数据。简而言之,您需要触发用户遵循的事件链。但是您将获得来自推送通知的数据,该数据将告诉您如何加载这些视图。通常,如果您适当地遵循了责任链模式或 MVC 模式,触发此事件链应该不难。如果这对您来说很难,那么您设计控制器的方式就有问题。

总结:根据从推送通知接收到的数据,通过消息链加载应用程序的状态。

注意:此外,如果您发现其他可能破坏系统不变性的方法

于 2013-10-14T20:35:31.170 回答