iOS常用UI控件-UITabBarController使用

UITabBarController(标签栏/底部导航栏视图控制器)

UITabBarController 本身并不会显示任何视图,如果要显示视图则必须设置其 viewControllers 属性(它默认显示 viewControllers[0])。这个属性是一个数组,它维护了所有 UITabBarController 的子控制器。

为了尽可能减少视图之间的耦合,所有的 UITabBarController 的子控制器的相关标题、图标等信息均由子控制器自己控制,UITabBarController 仅仅作为一个容器存在。

UITabBarController 生命周期

1.把子控制器都添加给 TabBarController 管理,当程序启动时它只会加载第一个添加的控制器的view。

2.切换到第二个界面。先把第一个界面的view移开,再把新的view添加上去,但是第一个view只是被移开没有被销毁。

3.重新切换到第一个界面,第一个的控制器直接 viewWillAppear,不会再执行 viewDidLoad 方法。第二个界面中的 view 移除后并没有被销毁(因为它的控制器还存在,有一个强引用引用着它)。

4.UINavigationController 通过栈来管理视图,UITabBarController 通过数组来管理视图控。

UITabBarController 常用属性

viewControllers:设置 UITabBarController 的子控制器

selectedIndex:属性可用于设置当前被选中的为哪个 Viewcontroller

selectedViewController:设置该属性可以设置当前选中的 ViewController

tabBar:设置 UITabBarController 底部标签栏背景图片、背景颜色、系统图标颜色等信息

tabBarItem:设置 UITabBarController 子控制器的相关标题、图标等信息

delegate:可以获取 TabBar 上点击事件


UITabBar

下图工具条称为UITabBar ,如果 UITabBarController 有N个子控制器,那么 UITabBar 内部就会有N 个 UITabBarItem 作为子控件与之对应。

UITabBar

UITabBarItem⾥面显⽰什么内容,由对应子控制器的 tabBarItem 属性来决定。

UITabBar上面显示的每一个Tab都对应着一个ViewController,我们可以通过设置 Viewcontroller 的 tabBarItem 属性来改变 Tabbar 上对应的tab显示内容。

否则系统将会根据 ViewController 的 title 自动创建一个TabBarItem,该 TabBarItem 只显示文字,没有图标。当我们自己创建 UITabBarItem 的时候,我们可以指定显示的图标和对应的文字。

UITabBar属性:

backgroundImage:设置 TabBar 背景图片

selectionIndicatorImage:设置 TabBar 选重 Item 背景图片

barTintColor:TabBar背景颜色

tintColor:TabBar选重 Item 图标颜色,只有使用系统默认图标时才有效

shadowImage:设置分隔线条

TabBar 里最多能放5个Item,如果你放6个或者以上,那么TabBar会显示前四个,然后再第五个Item的位置自动放一个 More Item来存放多出来的Items,你可以点进去选择更多的Item。

//设置tabBar背景图片

[self.tabBar setBackgroundImage:[UIImageimageNamed:@"TabBar_backGround_01"]];

//设置tabBar选重item背景图片

[self.tabBar setSelectionIndicatorImage:[UIImage imageNamed:@"TabBar_backGround"]];

//设置tabBar背景颜色

[self.tabBar setBarTintColor:[UIColorblackColor]];

//设置tabBar选重item图标颜色,只有使用系统默认图标时才有效

[self.tabBar setTintColor:[UIColorredColor]];


UITabBarItem属性:

title:标题文字

image:图标图片

selectedImage:设置选中时图标图片

badgeValue:设置提醒数字

自定义 UITabBarItem:

UITabBarItem*sevenItem = [[UITabBarItemalloc]initWithTitle:@"Seven"

image:[[UIImageimageNamed:@"TabBar"]

imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]

selectedImage:[[UIImageimageNamed:@"TabBarSe"]

imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

];


示例代码:

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

OneViewController *one = [storyboard instantiateViewControllerWithIdentifier:@"OneViewController"];

UINavigationController *oneNav = [[UINavigationController alloc] initWithRootViewController:one];

TwoViewController *two = [storyboard instantiateViewControllerWithIdentifier:@"TwoViewController"];

ThreeViewController *three = [storyboard instantiateViewControllerWithIdentifier:@"ThreeViewController"];

FourViewController *four = [storyboard instantiateViewControllerWithIdentifier:@"FourViewController"];

FiveViewController *five = [storyboard instantiateViewControllerWithIdentifier:@"FiveViewController"];

SixViewController *six = [storyboard instantiateViewControllerWithIdentifier:@"SixViewController"];

SevenViewController *seven = [storyboard instantiateViewControllerWithIdentifier:@"SevenViewController"];

self.viewControllers = @[oneNav, two, three, four, five, six, seven];

UITabBarItem *oneItem = [[UITabBarItem alloc]initWithTitle:@"One"

image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

oneItem.badgeValue = @"1";

UITabBarItem *twoItem = [[UITabBarItem alloc]initWithTitle:@"Two"

image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

UITabBarItem *threeItem = [[UITabBarItem alloc]initWithTitle:@"Three"

image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

threeItem.badgeValue = @"99";

UITabBarItem *fourItem = [[UITabBarItem alloc]initWithTitle:@"Four"

image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

fourItem.badgeValue = @"100";

UITabBarItem *fiveItem = [[UITabBarItem alloc]initWithTitle:@"Five"

image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

UITabBarItem *sixItem = [[UITabBarItem alloc]initWithTitle:@"Six"

image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

UITabBarItem *sevenItem = [[UITabBarItem alloc]initWithTitle:@"Seven"

image:[[UIImage imageNamed:@"TabBar"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

selectedImage:[[UIImage imageNamed:@"TabBarSe"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

// 设置 viewcontroller.tabBarItem属性

oneNav.tabBarItem = oneItem;

two.tabBarItem = twoItem;

three.tabBarItem = threeItem;

four.tabBarItem = fourItem;

five.tabBarItem = fiveItem;

six.tabBarItem = sixItem;

seven.tabBarItem = sevenItem;

// 设置标题颜色

[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary

dictionaryWithObjectsAndKeys:[UIColor colorWithRed:76/255.0f green:76/255.0f blue:76/255.0f alpha:1],

NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];

// 设置标题选重颜色

[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary

dictionaryWithObjectsAndKeys:[UIColor colorWithRed:83/255.0f green:187/255.0f blue:236/255.0f alpha:1],

NSForegroundColorAttributeName, nil] forState:UIControlStateSelected];

// 设置tabBar背景图片

[self.tabBar setBackgroundImage:[UIImage imageNamed:@"TabBar_backGround_01"]];

// 设置tabBar选重item背景图片

[self.tabBar setSelectionIndicatorImage:[UIImage imageNamed:@"TabBar_backGround"]];

// 设置tabBar背景颜色

[self.tabBar setBarTintColor:[UIColor blackColor]];

// 设置tabBar选重item图标颜色,只有使用系统默认图标时才有效

[self.tabBar setTintColor:[UIColor redColor]];

self.tabBar.shadowImage = [UIImage imageNamed:@""];

self.delegate = self;

}

- (BOOL)tabBarController:(UITabBarController*)tabBarController          shouldSelectViewController:(UIViewController*)viewController {

if([tabBarController.viewControllers indexOfObject:viewController] == 1) {

return NO;

}

return YES;

}

推荐阅读更多精彩内容