三種方法讓TabBarController和NavigationController並存 – iPhone手機開發技術文章 iPhone軟體開發教學課程

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瞭)。

如下圖:

https://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.aiwalls.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;

}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *