UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例子就是QQ、微信等应⽤。
/*
1.TabBar 在下面 TableBar 在上面
2. UITabBarController (标签视图控制器),多视图控制器 ,管理具有并列关系的视图 这些视图 同时存在 视图之间关联不大,一旦标签控制器超出管理界面五个 就会自动将最后一个标签 换成 More 剩余的标签就在 more里面展示
3.UITabBarController 管理的视图控制器,只在初次显示创建一次,之后就不再创建,其管理的视图控制器并列存在
*/
一 基本配置
我们来建工程 因为标签栏控制的是不同的独立页面 我们要建立三个界面把 好区别
1.cmd+n 继承 UIViewController
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "ThirdViewController.h"
2.为了防止再切换页面的时候卡顿 我们在每个页面的 .m 的viewDidLoad 里面 设置颜色
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%s",__FUNCTION__);
self.view.backgroundColor =[UIColor colorWithRed:250/255.0 green:128/255.0 blue:114/255.0 alpha:1];
// Do any additional setup after loading the view.
}
注:大家可以看到我的颜色 UIColor 后面跟的不是一个固定的颜色 而是 RGB 值 系统提供的颜色实在是太少了 又不好看 所有希望调出自己的颜色 就可以用 RGB 来设置
3.在AppDelegate 里面创建对象
#import "AppDelegate.h"
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "ThirdViewController.h"
@interface AppDelegate ()<UITabBarControllerDelegate>
@end
@implementation AppDelegate
- (void)dealloc
{
[_window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
//创建单视图控制对象
//First
//创建对象
FirstViewController *firstVC=[[FirstViewController alloc]init];
//配置 title
firstVC.tabBarItem .title =@"First";
//配置图标
firstVC.tabBarItem.image =[UIImage imageNamed:@"29-heart"];
//配置角标
firstVC .tabBarItem.badgeValue = @"99+";
// 配置唯一标示符
firstVC.tabBarItem.tag =100;
//Second
//创建对象
SecondViewController *secondVC=[[SecondViewController alloc]init];
//配置 title
secondVC .tabBarItem.title =@"Second";
//配置图标
secondVC .tabBarItem.image =[UIImage imageNamed:@"65-note"];
//配置角标
secondVC.tabBarItem.badgeValue = @"播放";
// 配置唯一标示符
secondVC.tabBarItem.tag = 101;
//Third
//创建对象
ThirdViewController *thirdVC= [[ThirdViewController alloc]init];
//配置 title
thirdVC.tabBarItem .title =@"Third";
//配置图标
thirdVC.tabBarItem.image =[UIImage imageNamed:@"61-brightness"];
- 创建 UITabBarController 对象 并对其赋值
//创建标签视图控制器
UITabBarController *tabBarVC= [[UITabBarController alloc]init];
//1.配置所管理的多个视图控制器 控制在标签中的位置 你在这里的排序 就是在模拟器中的位置
NSArray *controllers =@[firstVC,secondVC,fourthVC,thirdVC,fifthVC,sixVC];
//2.将多个视图控制器 赋值给标签视图控制器
tabBarVC .viewControllers =controllers;
//3.配置标签栏的颜色
tabBarVC.tabBar.barTintColor =[UIColor colorWithRed:225/255.0 green:250/255.0 blue:240/255.0 alpha:1];
//4.选中时的颜色 也就是 button 的颜色
tabBarVC.tabBar.tintColor =[UIColor colorWithRed:160/255.0 green:102/255.0 blue:211/255.0 alpha:1];
//5.配置标签栏的图片
tabBarVC.tabBar.backgroundImage =[UIImage imageNamed:@"tabbar_mainframe@2x"];
//6.配置默认选中的标签 下面两种方法 都可以达到默认的目的
// 6.1> 以下标选中默认标签
tabBarVC.selectedIndex =2;
// 6.2>以视图控制器为选中默认标签
tabBarVC.selectedViewController = thirdVC;
//7.配置代理属性
tabBarVC.delegate =self;
// 控制他们还需要将标签视图控制器指定为根视图控制器 特别关键的一步 如果不设为根视图控制器 你上面写的一切都不会受标签栏操作
self .window .rootViewController =tabBarVC;
[firstVC release];
[secondVC release];
[thirdVC release];
[fourthVC release];
[fifthVC release];
[sixVC release];
[tabBarVC release];
二 UITabBarItem
UITabBar上面显示的每一个Tab都对应着一个ViewController,我们可以通过设置viewcontroller.tabBarItem属性来改变tabbar上对应的tab显示内容
//举得栗子
mineNC.tabBarItem.image =[UIImage imageNamed:@"tabbar_me@2x"];
findNC.tabBarItem.image =[UIImage imageNamed:@"tabbar_discover@2x"];
//@"" 里面 是我们导入的图标 名字 标签栏 里面大部分用图标来代替文字 大家可以找一些自己喜欢的图片 使用在这里面
三 More
在最上面的定义中 提到了一旦标签控制器超出管理界面五个 就会自动将最后一个标签 换成 More 剩余的标签就在 more里面展示
四 对选中的标签进行操作
// 这两个代理方法 所以我们上面才会有设置属性
//当选中标签是触发,询问该标签是否可以被选中
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController NS_AVAILABLE_IOS(3_0){
if(viewController.tabBarItem.tag == 101){
return NO;
}
return YES;
}
//选中标签时触发的方法
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
//1. 选中标签时去掉标签角标 ,选中哪一个去掉哪一个
viewController.tabBarItem.badgeValue = 0;
}
// 这里的 badgeValue 就像是我们微信积攒了一天的消息不去看 上面的小提示
![这里写图片描述](http://img.blog.csdn.net/20150717200529870)
//我们通过选中标签的触发方法 来消除这个 badgeValue
总结:
标签控制栏是我们三大视图控制器 之一 以后会经常用到 里面的内容 需要大家记忆