1. 程式人生 > >三種方法讓TabBarController和NavigationController並存

三種方法讓TabBarController和NavigationController並存

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上的第一個檢視

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;

}