TabBarController中需要使用NavigationController,這樣可以實現TabbarController中的視圖導航。我總結了三種方法去實現,以供大家參考。
第一種:最簡單的是從NavigationController下手,先用TabBarController建立XIB文件,在XIB上拉出相應的Tabbar。這時如果去建立導航,只需要在上一頁和下一頁之間建立相應的對應關系。而如何建立對應關系呢,請看下面的代碼:
EDUThreeViewController *th = [[EDUThreeViewController alloc] initWithNibName:@"EDUThreeViewController" bundle:nil];
UINavigationController *n = [[UINavigationController alloc] initWithRootViewController:th];
[self presentViewController:n animated:YES completion:nil];
但我現在了解到這種僅支持彈出下一級視圖。
第二種:也是先建立TabBarController的XIB,然後在TabBar上拖入NavigationController,(這裡可以根據自己的需要的拖入NavigationControlle或TabBarItem,拖入NavigationController的頁面就自動有NavigationBar了)。
如下圖:
http://my.csdn.net/my/album/detail/1444381
就這樣,你就可以在相應的視圖中進行導航的設計了。但會在下一級視圖中出現TabBar,如果不需要可以通過代碼去除。所有代碼如下:
EDUStuViewController *stuViewController = [[EDUStuViewController alloc] init];
stuViewController.hidesBottomBarWhenPushed = YES;//去掉TabBar
[self.navigationController pushViewController:stuViewController animated:YES];
第三種:前面說的都是在XIB視圖中的,這裡我們要說的是在代碼中實現的。這裡需要在delegate中進行TabBarController和NavigationController的結合。實例代碼如下:
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//Override point for customization after application launch.
//TabBar上的第一個視圖 www.2cto.com
EDUaaViewController *aa = [[EDUaaViewController alloc] initWithNibName:@"EDUaaViewController" bundle:nil];
//把ViewController加入到NavigationController中
UINavigationController *aaNav = [[UINavigationController alloc] initWithRootViewController:aa];
//TabBar上的第二個視圖
EDUbbViewController *bb = [[EDUbbViewController alloc] initWithNibName:@"EDUbbViewController" bundle:nil];
//把ViewController加入到NavigationController中
UINavigationController *bbNav = [[UINavigationController alloc] initWithRootViewController:bb];
//把navigationController放入數組中
NSArray *controllerArray = [[NSArray alloc] initWithObjects:aaNav,bbNav,nil];
//建立TabBarController,需要在.h中先聲明
tabBarController = [[UITabBarController alloc] init];
tabBarController.delegate = self;
//把navigationController的數組加入到tabBarController中去
tabBarController.viewControllers = controllerArray;
tabBarController.selectedIndex = 0;
[(UITabBarItem *)[tabBarController.tabBar.items objectAtIndex:0] setTitle:@"體檢數據"];
[(UITabBarItem *)[tabBarController.tabBar.items objectAtIndex:1] setTitle:@"健康檔案"];
//UIViewController* activeController =tabBarController.selectedViewController;
[self.window addSubview:tabBarController.view];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}