文章目录
  1. 1. 实例代码
  2. 2. 自定义UITabBarItem
  3. 3. 基层分栏控制器和导航控制器
  • UITabBarController的基本概念
    • UITabBarController和UINavigationController一样是用来管理视图控制器的。
    • UINavigationController是用来管理视图之间的导航,UITabBarController是管理固定的几个视图控制器,子控制器是并列的。可以任意切换显示。
  • UITabBarController基本样式
  • UITabBarController初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

UIViewController *viewCtrl1 = [[UIViewController alloc] init];
viewCtrl.title = @"主页";

UIViewController *viewCtrl2 = [[UIViewController alloc] init];
viewCtr2.title = @"消息";

UIViewController *viewCtrl3 = [[UIViewController alloc] init];
viewCtr3.title = @"搜索";

UIViewController *viewCtrl4 = [[UIViewController alloc] init];
viewCtr4.title = @"设置";

NSArray *viewControllers = [NSArray arrayWitjObjects:viewCtr1,viewCtrl2,viewCtrl3,viewCtrl3,viewCtrl4,nil];
UITabBarController *mainViewController = [[UITabBarController alloc] init];
mainViewController.viewControllers = viewControllers;
[self.window setRootViewController:mainViewController];
  • 示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* ... */
/*
* 1.创建若干个子视图控制器,它们是并列关系
* 2.创建一个数组,将已创建的子视图控制器,添加到数组中
* 3.创建UITabBarContrller实例
* 4.tabBarController.viewContrllers = viewContollers;
* 5.添加到window的rootViewController
*/
UIViewController *vc1 = [[UIViewController alloc]init];
vc1.title = @"首页";
vc1.view.backgroundColor = [UIColor redColor];

UIViewController *vc2 = [[UIViewController alloc]init];
vc2.title = @"新闻";
vc2.view.backgroundColor = [UIColor blueColor];

UIViewController *vc3 = [[UIViewController alloc]init];
vc3.title = @"历史";
vc3.view.backgroundColor = [UIColor yellowColor];

UIViewController *vc4 = [[UIViewController alloc]init];
vc4.title = @"搜索";
vc4.view.backgroundColor = [UIColor purpColor];

UIViewController *vc5 = [[UIViewController alloc]init];
vc5.title = @"设置";
vc5.view.backgroundColor = [UIColor orangeColor];

NSArray *viewControllers = @[vc1,vc2,vc3,vc4,vc5];
UITabBarController tabBarController = [[UITabBarController alloc] init];
[UITabBarController setViewContronllers:viewControllers animated:YES];
self.window.rootViewController = tabBarController;
  • UITabBarController结构图

    • Tab控制器用数组管理视图,视图间是平级的。
  • TabBarController类图分析

    • 一个分栏视图控制器控制着若干视图控制器,由一个数组管理
    • 每个分栏控制器只有一个UITabBar视图,用于显示UITabItem实例
    • UITabBarItem由当前的视图控制器管理
  • UITabBarController系统样式
    +TabBar只能显示5个Tab Item,超过5个则会自动生成个More标签显示剩余的Tab,这些Tab可以通过编辑显示在UITabBar上。如果将视图添加到导航控制器中,默认出现编辑按钮,可以自由移动item实例。

实例代码

  • 创建系统自带的TabBarController
1
2
3
4
5
6
7
8
TabBarViewController *tabBarController = [[UITabBarViewController alloc]init];
FirstViewController *firstItem = [[FirstViewController alloc] init];
UITabBarItem *firstItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:1];
firstViewController.tabBarItem = firstItem;
// ......
NSArray *viewControllers = @[firstItem,secondItem,thirdItem];
[tabBarController setViewControllers:viewControllers animated:YES];
self.window.rootViewController = tabBarController;

自定义UITabBarItem

  • 图片大小3030px(视网膜屏6060)
  • 图片需要使用淡灰色或者半透明效果,选择系统自动填充蓝色
1
2
3
FirstViewController *firstVC = [[FirstViewController alloc]init];
UITabBarItem *firstItem = [[UITabBarItem alloc] initWithTitle:@"主页" image:[UIImage imageNamed:@"image.ong"]tag:1];
firstVC.tabBarItem = firstItem;
  • UITabBarController代理方法
1
2
3
4
5
6
7
8
-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
// 视图将被切换时调用,viewController为将被显示的控制器
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
// 视图已经被切换后调用,viewController为已经显示的控制器
}

基层分栏控制器和导航控制器

  • 在Tab Bar控制器中某一个Tab中使用Navigation控制器。
  • 实现代码
1
2
3
4
5
6
7
8
FirstViewController *firstVC = [[FirstViewController alloc] init];
UINavigationController * fNav = [[UINavigation alloc] initWithRootViewController:firstVC];
SecondViewController * secondVC = [[SecondViewController alloc] init];
//......
NSArray *viewControllers = [NSArray arrayWithObjects:firstVC,secondVC,nil];
UITabBarController*tabController = [[UITabBarController alloc] init];
tabController.viewControllers = viewControllers;
self.window.rootViewController = tabController;
文章目录
  1. 1. 实例代码
  2. 2. 自定义UITabBarItem
  3. 3. 基层分栏控制器和导航控制器