ui--UITabBarController
来源:互联网 发布:淘宝上的车秒贷靠谱吗 编辑:程序博客网 时间:2024/04/28 16:07
UITabBarController/分栏控制器/标签栏控制器
====================================
QQ:2530432526
【注】标签栏控制器,是UIKit框架提供的一个容器视图控制器,用于切换相同级别的兄弟视图控制器。iOS允许将导航控制器添加到标签栏控制器中进行管理(事实上这种结构非常常见),但原则上,不推荐将分栏控制器添加到导航控制器中进行管理。
导航栏控制器放在标签栏控制器里面
一、UITabBarItem
简介:UITabBarItem(标签栏项),呈现在标签栏(UITabBar)上
方法:
视图控制器通过tabBarItem属性来定制标签栏项的显示
1)xxx.tabBarItem.image
设置标签栏项的图片
2)xxx.tabBarItem.selectedImage
设置标签栏项的选中图片
4)xxx.tabBarItem.title
设置标签栏项的title
5)xxx.tabBarItem.badgeValue
设置标签栏项的徽标,用于提示用户
6)xxx.tabBarItem.titlePositionAdjustment
设置标题偏移量 正为下为右 负是上是左
创建UITabBarItem的方法
1)[[UITabBarItemalloc] initWithTitle:titleimage:image1tag:100];
2)[[UITabBarItemalloc]initWithTitle:titleimage:image selectedImage:selectImage];
根据title、image、selectedImage创建UITabBarItem
3)[[UITabBarItemalloc] initWithTabBarSystemItem:xxxtag:0]
根据系统样式去创建UITabBarItem
二、UITabBarController的方法
1)UITabBarController *tabController = [[UITabBarControlleralloc]init]
创建一个标签栏控制器
2)tabController.viewControllers = controllers;
1、viewControllers 数组,数组中的元素必须是视图控制器的对象
2、视图控制器对象的显示顺序(左到右)与在数组中的顺序一致
3、各个视图控制器是并列的关系,彼此互相独立,点击不同tabBarItem,切换不同的视图控制器的视图
4、当viewControllers中视图控制器的对象多于5个的时候,会自动创建一个标题为more的标签栏项,对应的为moreNavigationController的导航控制器的对象,第5个以及5以后的视图控制器会通过列表的形式呈现在moreNavigationController中
3)tabController.moreNavigationController
获取到我们的moreNavigationController
4)tabController.selectedIndex
通过下标的方式指定被选中的视图控制器
5)tabController.selectedViewController
通过指定被选中的视图控制器的方式
//特别重要的属性,设置哪个界面被选中
tbc.selectedIndex=2;
//设置哪个界面被选中,写的是添加到数组里面的视图
tbc.selectedViewController=vc6;(源代码在讲课代码 day 22中)
6)tabController.delegate = self;
设置代理
三.协议方法 UITabBarControllerDelegate
1、- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
tabBar将要切换到某个子视图控制器,返回YES允许,返回NO不许,第二个参数是被选的视图控制器
2、- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
tabBar已经切换到某个子视图控制器,第二个参数是被选的视图控制器
3、- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers
当more中,将要编辑视图控制器顺序
4、- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
当more中,将要结束编辑视图控制器顺序
5、- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
当more中,已经结束编辑视图控制器顺序
重要:
//此属性需要在视图控制器vc7加入到导航控制器之前设置
vc7.hidesBottomBarWhenPushed =YES;
当切换视图的时候,隐藏tabBar。
四.自制TabViewController
自制TabViewController第一步
NSMutableArray *controllers=[[NSMutableArrayalloc]init];
//通过数组的形式来创建视图,并且 运用Class class=NSClassFromString([NSString stringWithFormat:@“xxxx”,xxx]);来找数组中的对象,然后初始化视图控件UIViewController *vc=[[class alloc]init];然后把数组中的视图对象赋值给vc,然后把vc添加到开始自己初始化的可变数组中去
NSMutableArray *controllers=[[NSMutableArrayalloc]init];
NSArray *nameArray=@[@"界面一",@"界面二",@"界面三",@"界面四",@"界面五”];如果视图控件不需要标题,这个数组可以不需要,把相关的去掉就可以了 。
for (NSInteger i=0; i<nameArray.count; i++) {
Class class=NSClassFromString([NSString stringWithFormat:@"ViewController%ld",i+1]);
UIViewController *vc=[[class alloc]init];
vc.title=nameArray[i];
[controllers addObject:vc];
}
//设置自己的viewControllers。
self.viewControllers=controllers;
}
第二步
在设置之前需要使用
self.tabBar.hidden=YES;把标签栏隐藏了,然后在所在的视图上添加imageView或者UIView,在imageView上添加所需求的button 以及button的所学方法,设置button的两种状态正常状态和选中状态,btn.selected=YES;这个表示button是选中状态。在设置中必须把imageView的交互事件打开方法是imageView.userInteractionEnabled=YES;
如果你想下次进入app的时候是处在上次被选中的界面用如下方法
这是取值,这个是自己再添加一个方法 UI 第六天讲的
NSUserDefaults *defaults=[NSUserDefaultsstandardUserDefaults];
NSInteger index=[[defaults objectForKey:@"index"] integerValue];
//当我们的index的值在0-4之间,我们就更改tabBarController的视图的选中状态
if (index<=4&&index>=0) {
UIButton *btn=(UIButton *)[self.viewviewWithTag:100+index];
[self btnClick:btn];
}else{
//我们认为这个数据不合理,就把值改为0,改成默认的第一个
[defaults setObject:@"0"forKey:@"index"];
[defaults synchronize];
}
这个是存,一般是在button的点击方法中
NSUserDefaults *defaults=[NSUserDefaultsstandardUserDefaults];
[defaults setObject:[NSStringstringWithFormat:@"%ld",btn.tag-100]forKey:@"index"];
[defaults synchronize];
补充:
1、 button.titleEdgeInsets =UIEdgeInsetsMake(30, -25,0, 0);
设置button文字偏移,让开图片,四个值是相对于之前文字的上左下右的距离
2、button.imageEdgeInsets =UIEdgeInsetsMake(5,12, 15, 12);
设置图片偏移,让开文字
3、button.adjustsImageWhenHighlighted = NO;
设置点击不闪烁
4、viewWithTag这个方法是深度遍历,也就是说,不仅能找到self.view的子视图,也能找到子视图的子视图
UI day 7 什么是单例?对于app来说有很多界面,这些功能来说都是同一个人来做的,需要获取用户信息是一个人打开的,主要用来传值
点赞是代理写的,视图之间的传值。
- UI UITabBarController
- UI - UITabBarController
- ui--UITabBarController
- UI基础-UITabBarController标签视图
- UI进阶第七发:UITabBarController简单介绍
- iOS Storyboard UI框架搭建,UITabBarController UINavigationController
- UI课程14 标签视图控制器 UITabBarController
- UI基础篇-------UITabBarController的使用
- iOS开发UI篇—UITabBarController使用
- UI控件笔记(九):UI之UITabBarController
- UITabbarController
- UITabBarController
- UITabBarController
- UITabBarController
- UITabBarController
- UITabBarController
- UITabbarController
- UITabBarController
- Java设计模式之四——代理模式
- 二叉树中序遍历-lintcode
- JS获取表格单元格坐标及给指定单元格赋值
- 计算机网络整理(谢希仁版)
- 关于javascript词法分析的自己的理解。
- ui--UITabBarController
- tomcat7关键配置和线程
- 网易MySQL数据库工程师微专业学习笔记(一)
- kmp算法&&学习感想
- [嵌入式]Cortex-A8处理器编程(中)
- javascript词法分析自己的个人理解。
- 一小时包教会 —— webpack 入门指南
- NYOJ42 一笔画问题(欧拉路+并查集)
- App分享下载统计-你的分享是否带来了用户?