在远程通知的tabbarcontroller /导航层次结构中显示DetailView

时间:2014-09-02 16:34:04

标签: ios uinavigationcontroller push-notification uitabbarcontroller

我在几天内搜索了无数的帖子,从来没有找到任何一个完全正确的答案来完成我看似直截了当的任务:

我的应用程序有一个主tabbarcontroller(tbc),第一个选项卡有一个简单的视图控制器,其余的有一个面向导航控制器的层次结构。

任务很简单:接受入站远程通知,并启动比第4个选项卡导航控制器的根视图深一级的详细信息表单(dv)(此处标记为id = 3)。

tbc是app的rootviewVC。这个主题很好用。对主题的分析都有效。无论我尝试什么,似乎我只能得到主要的tbc来显示(到tab3)或dv显示正确的细节,但没有看到tbc。

我最终通过基本上按照下面显示的AAA线手动重置tbc来实现它,但是对我来说没有必要重新创建tbc中的所有选项卡以使其工作。如果你知道在哪里看,答案可能很容易:

那么问题:是否有更好的方法来启动面向导航的层次结构中的详细视图,该层次结构位于tabbarcontroller中的一个选项卡中,该选项卡是应用程序的根视图?

工作代码示例:

UIStoryboard *mainstoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tbc = [mainstoryboard instantiateViewControllerWithIdentifier:@"AppTabBarController"];

//setup tabs
//TODO: we should not have to create these here as the storyboard already has them...
UINavigationController *mainViewController = [mainstoryboard instantiateViewControllerWithIdentifier:@"Tab0NavController"];
UINavigationController *Tab1NavController = [mainstoryboard instantiateViewControllerWithIdentifier:@"Tab1NavController"];
UINavigationController *Tab2NavController = [mainstoryboard instantiateViewControllerWithIdentifier:@"Tab2NavController"];
UINavigationController *Tab3NavController = [mainstoryboard instantiateViewControllerWithIdentifier:@"Tab3NavController"];

[self.window setRootViewController:tbc];
[self.window makeKeyAndVisible];

//setup the destination detail view to show & set its' property we must manage (temp only, real code uses payload
QTManageContactVC *vc3 = [Tab3NavController.storyboard instantiateViewControllerWithIdentifier:@“Tab3VC"];
PFObject *newWidget = [PFObject objectWithClassName:@“Widget"];
{set details code}
vc2.widget = newConnection;

//AAA 
[tbc setViewControllers:@[mainViewController, Tab1NavController, Tab2NavController, Tab3NavController]];
[tbc setSelectedIndex:3];
[Tab3NavController pushViewController:vc3 animated:NO];

completionHandler(UIBackgroundFetchResultNoData);
return;

1 个答案:

答案 0 :(得分:0)

对于那些在安排上苦苦挣扎的人来说,这就是:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];                        
[(UITabBarController *)self.window.rootViewController setSelectedIndex:YourIndexValue];

UINavigationController *nav = [[(UITabBarController *)self.window.rootViewController viewControllers]objectAtIndex:YourIndexValue];
YourViewController *targetVC = [mainStoryboard instantiateViewControllerWithIdentifier:@"ManageContactVC"];                        

[nav pushViewController:targetVC animated:NO];