1

我似乎還沒有足夠的理解UITabBar,UITabBarController和導航控制器來做我想做的事情。我希望有人能提供一些指導。iOS導航和TabBarControllers

我總共有8個VC。我希望其中的五個可以從第一個(啓動)屏幕上的TabBar中選擇,並且選擇任何項目都會加載特定的VC。一旦選定了一個VC,它將會加載,並且我需要將8個全部選項中的約5個作爲潛在目的地的不同集合。對其他任何人都是一樣的。

因此,給定的VC將需要自己的TabBar,並且可以擁有8個VC中的任何一個。實質上,我希望用戶能夠使用標籤欄從一個VC切換到下一個,而不必回到根VC。

我很清楚如何在啓動屏幕上使用tabbarcontroller加載我第一次需要的視圖。但是,考慮到加載的VC可能需要在其選項卡欄中選擇不同的VC,如何設置它?

總括來說,我有

ROOT VC有如下的選擇

VC-A 
VC-B 
VC-C 
VC-D 
VC-D 

如果選擇VC-A,你能從VC-A

VC-C 
VC-D 
VC-E 
VC-F 
以下選擇

如果您選擇VC-B,您將從VC-B獲得以下選擇:

VC-A 
VC-C 
VC-D 
VC-E 
VC-R 

等等。

我想所有這些選擇基於UITabBar或UITabBarController。由於每個VC可能需要大量內存,我還擔心如果VC-B選擇VC-D,我可以銷燬VC-B(或至少部分實施,必要時可重新加載)以節省內存(根據需要重新實施)。

現在已經晚了。我希望我已經充分解釋了我想要做的事情。另外,不使用任何NIB;一切都是編程編碼的。

在此先感謝任何人可以提供的幫助。我打開任何&所有建議。

回答

2

我認爲最好的辦法是使用一個單一的UITabBarController。用你的前5個VC初始化它並設置它的委託。您的UITabBarControllerDelegate應該實施tabBarController:didSelectViewController:。在該委託方法內,刷新您的UITabBarController中的VC,根據哪個VC被選中,以便只顯示與所選VC相關的VC。

另一方面,我強烈建議不要這樣做。這樣的導航結構對用戶來說似乎非常複雜。也許你可以通過簡化結構來製作更好的應用程序。

+0

我結束了使用這種方法,它的工作完美。儘管如此,我堅持使用原始的導航設計,因爲用戶必須能夠在不返回根VC的情況下動態交換VC。但所有這些答案對我都有幫助。謝謝。 – RegularExpression

1

你需要的是建立一個UINavigationController(你可以做到這一點每一個容易故事板)作爲每個選項卡UITabBarController,每個UINavigationController設置一個根視圖控制器(即要顯示的第一個視圖控制器當用戶在該選項卡上第一次點擊時)。

完成上述建議後,您將有5個帶有根視圖控制器的5 UINavigationControlles的選項卡欄,現在您可以爲每個選項卡(推/彈出)定義您喜歡的任何導航。

2

試試這個

UITabBarController *tabBar = [[UITabBarController alloc]init]; 
UINavigationController* nav1=[[UINavigationController alloc]init]; 
UINavigationController* nav2=[[UINavigationController alloc]init]; 
UINavigationController* nav3=[[UINavigationController alloc]init]; 

FirstVC *ObjFirstVC = [[FirstVC alloc] init]; 
nav1.viewControllers=[NSArray arrayWithObjects:ObjFirstVC, nil]; 
[email protected]"First"; 

SecondVC *ObjSecondVC = [[SecondVC alloc] init]; 
nav2.viewControllers=[NSArray arrayWithObjects:ObjSecondVC, nil]; 
[email protected]"Second"; 

ThirdVC *ObjThirdVC = [[ThirdVC alloc] init]; 
nav3.viewControllers=[NSArray arrayWithObjects:ObjThirdVC, nil]; 
[email protected]"Third"; 

tabBar.viewControllers=[NSArray arrayWithObjects:nav1,nav2,nav3,nil];