2012-09-05 46 views
5

根據Apple,我可以結合UINavigationControllerUITabBarController使用的代碼,例如。我應該使用一個單獨的UINavigationController每個標籤欄

MyViewController1* vc1 = [[MyViewController1 alloc] init]; 
MyViewController2* vc2 = [[MyViewController2 alloc] init]; 
MyViewController3* vc3 = [[MyViewController3 alloc] init]; 

MyNavRootViewController* vc4 = [[MyNavRootViewController alloc] init]; 
UINavigationController* navController = [[UINavigationController alloc] 
         initWithRootViewController:vc4]; 

NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, vc3, navController, nil]; 
tabBarController.viewControllers = controllers; 

在這種設置中,只有VC4UINavigationController,但如果我想VC1-VC3也有UINavigationController?,我應該做的一樣..

MyViewController1* vc1 = [[MyViewController1 alloc] init]; 
UINavigationController* nv1 = [[UINavigationController alloc] 
         initWithRootViewController:vc1]; 

MyViewController1* vc2 = [[MyViewController2 alloc] init]; 
UINavigationController* nv2= [[UINavigationController alloc] 
         initWithRootViewController:vc2]; 

MyViewController1* vc3 = [[MyViewController3 alloc] init]; 
UINavigationController* nv3 = [[UINavigationController alloc] 
         initWithRootViewController:vc3]; 


NSArray* controllers = [NSArray arrayWithObjects:nv1, nv2, nv3, nil]; 
tabBarController.viewControllers = controllers; 

這是正確的方法?

+0

那麼,這取決於這是你想要的...我不會說這種方法是錯誤的,但也許它不會給你可能預期的結果和/或有更好的方法。你的目標是什麼? – Saphrosit

+0

如果您必須在單個Tab中瀏覽很多視圖,那麼您需要使用navigationController。如果每個選項卡都顯示單個ViewController,則不要使用navigationController。這完全取決於你的要求是什麼。 –

回答

1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 


// Override point for customization after application launch. 

self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 

self.tabBarController.viewControllers = [self initializeTabBarItems]; 
self.navigationController = [[UINavigationController alloc]init]; 
[self.navigationController setNavigationBarHidden:YES]; 
self.window.rootViewController = self.navigationController; 
[self.navigationController pushViewController:_tabBarController animated:YES]; 
[self.window makeKeyAndVisible]; 
return YES; 
} 
- (NSArray *)initializeTabBarItems 
{ 
NSArray * retval; 

/* Initialize view controllers */ 
UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease]; 
UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease]; 
UIViewController *viewController3 = [[[ThirdViewController alloc]initWithNibName:@"ThirdViewController" bundle:nil]autorelease]; 
UIViewController *viewController4 = [[[FourthViewController alloc] initWithNibName:@"FourthViewController" bundle:nil] autorelease]; 
UIViewController *viewController5 = [[[FivfthViewController alloc] initWithNibName:@"FivfthViewController" bundle:nil] autorelease]; 


/* Initialize navigation controllers */ 
UINavigationController * navigationController1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
UINavigationController * navigationController2 = [[UINavigationController alloc] initWithRootViewController:viewController2]; 
UINavigationController * navigationController3 = [[UINavigationController alloc] initWithRootViewController:viewController3]; 
UINavigationController * navigationController4 = [[UINavigationController alloc] initWithRootViewController:viewController4]; 
UINavigationController * navigationController5 = [[UINavigationController alloc] initWithRootViewController:viewController5]; 

/* Release View Controllers */ 
[viewController1 release]; 
[viewController2 release]; 
[viewController3 release]; 
[viewController4 release]; 
[viewController5 release]; 

/* Stuff Navigation Controllers into return value */ 
retval = [NSArray arrayWithObjects:viewController1,viewController2,viewController3,viewController4,viewController5,nil]; 

/* Release Navigation Controllers */ 
[navigationController1 release]; 
[navigationController2 release]; 
[navigationController3 release]; 
[navigationController4 release]; 
[navigationController5 release]; 

return (retval); 
} 

你可以試試這個....

+0

不應該是:'retval = [NSArray arrayWithObjects:navigationController1,navigationController2,navigationController3,navigationController4,navigationController5,nil];' – viral

0

你應該根據你的TabBarController的標籤一個UINavigationController的。所以你的第二種方法是正確的。我不認爲你可以重複使用相同的導航控制器的所有標籤。

0

是的,你的方法是正確的。

如果你必須將視圖導航到選項卡,那麼該選項卡應該有導航控制器。

UINavigationController * navigationCtrl = [[UINavigationController alloc] initWithRootViewController:firstTabViewCtrl]; 
[arrTabs addObject:navigationCtrl]; 

任何一個明智的是沒有必要的導航控制器裏面的標籤。

[arrTabs addObject:firstTabViewCtrl]; 
2

是的霍華德,你的方法很好。 Apple也這樣說。我同樣使用UITabbarControllerUINavigationController同樣的方法,它對我很好。

相關問題