三種方法讓TabBarController和NavigationController並存
TabBarController中需要使用NavigationController,這樣可以實現TabbarController中的檢視導航。我總結了三種方法去實現,以供大家參考。
第一種:最簡單的是從NavigationController下手,先用TabBarController建立XIB檔案,在XIB上拉出相應的Tabbar。這時如果去建立導航,只需要在上一頁和下一頁之間建立相應的對應關係。而如何建立對應關係呢,請看下面的程式碼:
EDUThreeViewController *th = [[EDUThreeViewController
alloc] initWithNibName:@"EDUThreeViewController"
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
第三種:前面說的都是在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上的第一個檢視
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;
}