基本现在常见的应用里单一使用Navigation导航栏或者单独使用TabBar的情况已经不多见了,除非是特别专一的应用方式,否则常常会见到两种布局方式结合起来,自己在做第一个项目的时候也是遇到了这个需求,当时也是纠结了一些小问题,这里说一下我的方法。
其实想法很简单,是一个多层包装的模式,也就是先分别把自己有导航需求的界面创建出来之后,分别用UINavigationController把这几个界面控制器包装起来,然后初始化一个一个TabBar包含几个Navigation,每个Navigation再包含各自的界面控制器的结构,代码如下:
代码语言:javascript复制//创建两个自己的界面控制器
ViewControllerOne *one = [[ViewControllerOne alloc]initWithNibName:@"ViewControllerOne" bundle:nil];
ViewControllerTwo *two= [[ViewControllerTwo alloc]initWithNibName:@"ViewControllerTwo" bundle:nil];
//分别用导航栏控制器包装起来
UINavigationController *NavViewOne = [[UINavigationController alloc]initWithRootViewController:one];
UINavigationController *NavViewTwo = [[UINavigationController alloc]initWithRootViewController:two];
//初始化TabBar控制器
UITabBarController *tabBar = [[UITabBarController alloc]init];
//把两个导航栏控制器添加到TabBar控制器中去
[tabBar setViewControllers:[NSMutableArray arrayWithObjects:NavViewOne, NavViewTwo, nil nil];
tabBar.view.frame = CGRectMake(0, -20, 320, 480);//不加这一句将会有一段状态栏高度的空白区域
此外,导航栏的标题可以在各个页面中自行设置,比如在viewDidload方法中,如下:
代码语言:javascript复制self.title = @"标题"
要设置各个界面的tab样式,可以在initWithNibName方法中加入如下代码:
代码语言:javascript复制ITabBarItem *item = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemSearch tag:1];//设置tabbar样式
self.tabBarItem = item;