一、标签视图控制器——UITabBarController
1、UITabBarController的继承关系:
@interface UITabBarController : UIViewController<UITabBarDelegate, NSCoding>
UITabBarController和UINavigationController一样都是继承于UIViewController。
2、创建UITabBarController
- 程序的添加过程:UIWindow->UITabBarController->UINavigationController->UIViewController
// 1.创建UITabBarController对象 UITabBarController *mainTabBar = [[UITabBarController alloc] init]; // 2.将TabBarController管理的视图控制器放到一个数组中 NSArray *viewControllers = [NSArray arrayWithObjects:firestNav, secondNav, thirdNav, fourthNav, nil]; // 3.设置TabBarController的子视图控制器数组 mainTabBar.viewControllers = viewControllers; // 4.将根视图控制器设置成TabBarController [self.window setRootViewController:mainTabBar];
- UITabBarController的重要属性:
- viewControllers:管理的视图控制器(NSArray)
- tabBar:标签栏
- selectedIndex:选中的某个tabBarItem
- delegate:代理(通过协议监听当前点击了哪个标签,代码示例)
// 点击某个标签时(tabBarItem)时触发该方法 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { viewController.tabBarItem.badgeValue = nil; }
二、UITabBar
1、UITabBar概述
- UITabBar包含多个UITabBarItem,每一个UITabBarItem对应一个UIViewController。UITabBar的高度是49。
- 系统最多只显示个UITabBarItem,当UITabBarItem超过5个时系统会自动增加一个更多按钮,点击更多按钮没有在底部出现的按钮会以列表的形式显示出来。(如下图所示)
2、UITabBar的属性:tintColor、barTintColor、图像设置等。
// TabBar的属性 // 设置选中的颜色 mainTabBar.tabBar.tintColor = [UIColor greenColor]; // 半透明效果,默认打开 mainTabBar.tabBar.translucent = NO; // 设置tabBar的颜色 mainTabBar.tabBar.barTintColor = [UIColor whiteColor]; // 设置提示 thirdVC.tabBarItem.badgeValue = @"99+"; // 改变tabBar的位置(如果Item重叠可能会导致不能点击,纵向移动的是文字) [secondVC.tabBarItem setTitlePositionAdjustment:UIOffsetMake(, )];
// 设置tabBarItem // 第一种方式:系统样式 firstVC.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:]; // 第二种方式:自定义样式 UIViewController *secondVC = [[UIViewController alloc] init]; secondVC.view.backgroundColor = [UIColor yellowColor]; // 创建图片对象 // 未选中的图片 UIImage *secondImage = [UIImage imageNamed:@"carGary"]; // 选中时的图片 UIImage *secondSelectImage = [UIImage imageNamed:@"carRed"]; // 设置图片保留原有样式,不被渲染 secondImage = [secondImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; secondSelectImage = [secondSelectImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; secondVC.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"第二页" image:secondImage selectedImage:secondSelectImage];
三、自定义tabBar外观
UIAppearance协议可以进行一键设定所有导航视图控制器的颜色的操作。
#pragma mark - UIAppearance // 设置全局外观 // 通过[UITabBar appearance]得到当前应用的UITabBar对象来设置tabBar的外观 // 注意:设置全局外观最好在AppDelegate里,否则会无效 [[UITabBar appearance] setBarTintColor:[UIColor cyanColor]]; [[UITabBar appearance] setTintColor:[UIColor brownColor]]; // 改变导航栏外观颜色 [UINavigationBar appearance].barTintColor = [UIColor blackColor]; // 改变导航栏字体颜色 [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName : [UIFont systemFontOfSize:]}];