0

tabbarcontroller /导航层次结构中的我搜遍了无数的帖子在几天,从来没有发现任何一个完全正确的答案,我的看似简单的任务:显示的DetailView从远程通知

我的应用程序有一个主tabbarcontroller(TBC)第一个标签有一个简单的视图控制器,其余的则有一个导航控制器导向的层次结构。

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

tbc是应用的rootviewVC。图案的工作正常。主题的分析都是有效的。无论我尝试了什么,看起来我只能得到主要的tbc来显示(到tab3)或dv显示正确的细节,但没有看到tbc。

我最终通过基本上手动重置tbc来实现按照下面所示的AAA行的方式工作,但对我来说,我不得不基本重新创建tbc中的所有选项卡以使其工作。答案可能很简单,如果你知道在哪里看:

SO ..问题:是否有更好的方法来启动一个面向导航的层次结构内的细节视图,该视图存在于tabbarcontroller中的一个标签中是一个应用程序的rootview?

工作的代码示例:

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; 
+0

这也许是过于详细,或者不是孤立的回答了..我所知道的当标签显示视图都有不同的导航控制器时,我必须缺少一些基本的东西。我有一个奇怪的时间试图让简单的pushviewcontroller调用实际显示我想要的视图..上面的工作,但似乎太多了。 我的想法是简单地抓住我需要的标签的navcontroller,通过storyboard id,设置tabbarcontroller的navcontroller到那,然后将视图推到该navcontroller进入我需要的详细视图。 似乎很简单,但没有上述..不行。 – 2014-09-08 15:10:16

回答

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];