didBeceiveRemoteNotification从tabbarcontroller推送viewcontroller

时间:2013-10-14 19:07:03

标签: ios xcode uinavigationcontroller appdelegate

我有一个应用推送推送通知的应用。

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

当我推动时,我能够设置正确的标签栏控制器。但我想沿着整条线走到我的细节视图。

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

有了这个,我得到了正确的tabview。但是如何将其推送到正确的细节视图?而且我还需要发送一个对象(因此它可以显示正确的数据)。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你还没有正确理解UINavigationBarController。它就像是一个推送和弹出元素的堆栈。

是否有可能将第8个元素直接推送到堆栈而没有先前的7个堆栈?

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

-(void)didReciveRemoteNotification{

    [tabBarController.viewcontroller objectAtIndex:2/*Index of your navigation controller*/];
    // once you get a refrence to you nav you have to push your root view controller and call
    // call messages on each and every view controller which does the transition.
    UITableViewController *tableVC = [[UITableViewController alloc] init];
    [self.navigationController pushViewController:tableVC];

    // trigger your events simply with a single message and let every view 
    // controller load it successive viewcontrollers.


    [tableVC didSelectRowAtIndex .. ]; 

}

这也会加载您的数据。简而言之,您需要触发事件链,然后由您的用户执行。但是您将获得推送通知中的数据,该数据将告诉您如何加载这些视图。通常,如果您已适当地遵循chain of responsibility patter或MVC模式,则应该不难触发此事件链。如果它对您来说很困难,那么您设计控制器的方式就会出现问题。

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

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