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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容