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