在一个正常的IOS应用中,必然包括很多视图,我们需要在不同的视图中进行跳转,常见的方法有模态视图、UItabarController、UINavigationController进行视图之间的跳转,本篇博客总结UITabBarController的常见的用法。
一、目录
1.什么是UITableBarController
2.简单使用
3.常见属性
4.总结
二、什么是UITableBarController
UITabBarController是Apple专门为了利用页签切换视图而设计的,如图所示的微信和天猫的底部导航。
三、简单使用
我们实现如动图所示的功能,介绍UITabBarController的基本使用方法,对其有个基本的认识。
1.使用步骤:
(1)初始化UITabBarController
(2)设置UIWindow的rootViewController为UITabBarController
(3)创建相应的子控制器(UIViewController)
(4)把子控制器添加到UITabBarController
2.代码示例:
程序结构,其中有四个UIViewController视图控制器,分别对应这短信,电话,关注,联系人等视图控制器。
AppDelegate.m代码
1 // 2 // AppDelegate.m 3 // TestUITabController 4 // 5 // Created by gurk on 15/3/19. 6 // Copyright (c) 2015年 thinkive. All rights reserved. 7 // 8 9 #import "AppDelegate.h"10 #import "SMSCtrl.h"11 #import "PhoneCtrl.h"12 #import "FocusCtrl.h"13 #import "ContactCtrl.h"14 @implementation AppDelegate15 16 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions17 {18 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];19 self.window.backgroundColor = [UIColor whiteColor];20 21 UITabBarController *tbCtrl = [[UITabBarController alloc]init];22 //设置window的根控制器为tbCtrl23 self.window.rootViewController = tbCtrl;24 25 //创建子控制器26 SMSCtrl *smsCtrl = [[SMSCtrl alloc]init];27 PhoneCtrl *phoneCtrl = [[PhoneCtrl alloc]init];28 FocusCtrl *focusCtrl = [[FocusCtrl alloc]init];29 ContactCtrl *contactCtrl = [[ContactCtrl alloc]init];30 31 #pragma mark设置UITabBarController的底部页签的标题与图片32 //title设置标题,image属性设置图片33 smsCtrl.tabBarItem.title = @"短信";34 UIImage *smsImage = [UIImage imageNamed:@"sms.png"];35 smsCtrl.tabBarItem.image = smsImage;36 37 phoneCtrl.tabBarItem.title = @"电话";38 UIImage *phoneImage = [UIImage imageNamed:@"phone.png"];39 phoneCtrl.tabBarItem.image = phoneImage;40 41 focusCtrl.tabBarItem.title = @"关注";42 UIImage *focusImage = [UIImage imageNamed:@"focus.png"];43 focusCtrl.tabBarItem.image = focusImage;44 45 contactCtrl.tabBarItem.title = @"联系人";46 UIImage *contactImage = [UIImage imageNamed:@"contact.png"];47 contactCtrl.tabBarItem.image = contactImage;48 49 //添加UIViewController到UITabBarController中50 tbCtrl.viewControllers = @[smsCtrl,phoneCtrl,focusCtrl,contactCtrl];51 52 [self.window makeKeyAndVisible];53 return YES;54 }55 56 - (void)applicationWillResignActive:(UIApplication *)application57 {58 }59 60 - (void)applicationDidEnterBackground:(UIApplication *)application61 {62 }63 64 - (void)applicationWillEnterForeground:(UIApplication *)application65 {66 67 }68 69 - (void)applicationDidBecomeActive:(UIApplication *)application70 {71 72 }73 74 - (void)applicationWillTerminate:(UIApplication *)application75 {76 77 }78 79 @end
四、常见的属性
1.UITabBar与UITabBarButton
下方的页签那一行整体称为UITabBar,每个页签是UITabBarButton,如果UITabBarController有N个字控制器,那么UITabBar内部就会有N个UITabBarButton作为子控制器与之对应。
关系如图所示
注意:UITabBarButton在UITabBar中的位置是均分的,UITabBar的高度是49,
在上面的演示程序中,UITabBarController中有4个自控制器,所以UITabBarButton有4个UITabBarButton
2.UITabBarButton
UITabBarButton里面显示什么内容,由对应的子控制器tabBarItem属性来决定
1 //title设置标题,image属性设置图片2 smsCtrl.tabBarItem.title = @"短信";3 UIImage *smsImage = [UIImage imageNamed:@"sms.png"];4 smsCtrl.tabBarItem.image = smsImage;5 smsCtrl.tabBarItem.badgeValue = @"8";
具体的的属性如下:
3.有两种方式可以往UITabBarController中添加子控制器
(1)[tbCtrl addChildViewController:smsCtrl];
(2) tbCtrl.viewControllers = @[smsCtrl,phoneCtrl,focusCtrl,contactCtrk];
4.在UITabBar中展示的顺序和添加的顺序是一致的。
五、总结
1.UITabBarController会一次初始化所有的子控制器,但是默认只加载第一个控制器视图,其他视图控制器只初始化默认不会加载
2.每个视图控制器都有哟个tabBarController属性,通过它可以访所在UITabBarController,而且对于UITabBarController的子视图其tabBarController等于parentViewController。
3.每个视图控制器都有一个tabBarItem属性,通过它控制视图在UITabBarController的tabBar中显示信息。
4.tabBarItem的image属性必须是png格式的(建议大学32*32)并且打开alpha通道否则无法正常显示。