IOS开发。UITabBarController常用和自定义

IOS开发。UITabBarController常用和自定义

2023年7月14日发(作者:)

IOS开发。UITabBarController常⽤和⾃定义我的⽂章套路还是⼀样,先上基础,后上常⽤:abBarController的基本属性:- (void)viewDidLoad { [super viewDidLoad]; //1.创建标签控制器 UITabBarController *tab = [[UITabBarController alloc]init];//2.创建相应的⼦控制器(viewcontroller) FirstViewController *firstVC = [FirstViewController new]; = @"通讯录"; = @"通讯录"; = [UIImage imageNamed:@"12-eye"]; UINavigationController *firstNC = [[UINavigationController alloc]initWithRootViewController:firstVC]; SecondViewController *secondVC = [SecondViewController new]; = @"朋友圈";//设置标签名称 = @"朋友圈";//可以根据需求设置标签的的图标 = [UIImage imageNamed:@"21-skull"]; UINavigationController *secondNC = [[UINavigationController alloc]initWithRootViewController:secondVC]; //3.添加到控制器 //特别注意:管理⼀组的控制器(最多显⽰五个,多余五个的话,包括第五个全部在更多模块⾥⾯,并且可以通过拖拽⽅式进⾏顺序编辑); NSArray *array = @[firstNC,secondNC] ntrollers = array;```我们在实际操作过程中还可以根据taBar的属性,标签栏的颜⾊、风格、⽂字颜⾊等等//设置标签栏⽂字和图⽚的颜⾊lor = [UIColor orangeColor];//设置标签栏的颜⾊tColor = [UIColor blackColor];//设置标签栏风格(默认⾼度49)le = UIBarStyleBlack;//设置初始状态选中的下标edIndex = 3;以上是基本的⼀些属性和操作。但是在实际开发中我们使⽤⾃定义tabbar还是⽐较多的,所以补充⼀下⾃定义tabbar。后⾯会上传代码####封装⾃定义UITabBarController,解决代码结构清晰问题* 1 添加⾃定义UITabBarController的⼦控制器。在initWithNibName⾥添加,原因:⼦控制器只需要添加⼀次,并且控制器不需要懒加载,视图才需要,在⼀创建的时候就拥有⼦控制器。 写代码最好⼀个功能⼀个⽅法,是代码结构清晰,⽅便以后维护,不要所有代码写在⼀起。* 2 设置⾃定义UITabBarController的tabBar上⾯的按钮内容,由对应⼦控制器的tabBarItem决定。* 3 重构初始化⾃定义UITabBarController的⼦控制器的代码![⽬录结构](/upload_images/?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)####tabBar上按钮图⽚处理* 1> 处理tabBar上按钮的选中图⽚, ios7默认会把tabBar上按钮的选中图⽚,渲染成蓝⾊。告诉图⽚保持最原始的图⽚,不要渲染。* 2> 定义当前版本号的全局宏,在ios7才需要保持最原始的图⽚。我封装了⼀个分类:import "UIImage+LWImage.h"@implementation UIImage (LWImage)+(instancetype)imageWithOriginalName:(NSString *)imageName{UIImage *image = [UIImage imageNamed:imageName];return [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];}@end---####设置TabBar上按钮选中⽂字颜⾊。* 1> tabBar上的按钮由tabBarItem决定,可以通过tabBarItem设置⽂字颜⾊,有相应的set⽅法,传⼊⼀个⽂字属性字典设置。• tabBar的label⽂字的颜⾊,在iOS7以上默认是⿊⾊,选中是蓝⾊。• 我要的效果:label的⽂字颜⾊,默认为⿊⾊,选中为红⾊.* 2> 只需要设置⼀次,可以拿到项⽬中的所有tabBarItem设置,在Initial设置,并不需要每次都拿到⼀个tabBarItem设置。---####调整TabBar上按钮的位置。* 1> ⾃定义TabBar,继承TabBar• 原因:系统⾃带的不好使,⼀个控制器对应⼀个tabBarButton,微博下边有5个按钮,需要弄个⾃⼰的tabBar。* 2> 如何利⽤系统⾃带的tabBar上的按钮,就不需要⾃⼰创建tabBarButton?• 解决⽅式:覆盖tabBar控制器⾃带的tabBar为⾃⼰的tabBar* 3> ⽬的:覆盖tabBar控制器⾃带的tabBar属性为⾃⼰的tabBar,让系统把tabBar上的按钮添加到我们的tabBar上,调整系统⾃带tabBarButton的位置。* 4> 好处:利⽤系统⾃带的tabBarButton,如果只是把⾃定义TabBar加上系统的tabBar上,就拿不到系统⾃带的tabBarButton,去设置他的位置,必必须⾃⼰⾃定义tabBar上的按钮,很⿇• 解决⽅式:覆盖tabBar控制器⾃带的tabBar为⾃⼰的tabBar* 5> 原理:tabBar上的按钮是在viewDidAppear的时候拿到 调⽤addSubViews添加上去的,在viewDidAppear之前把控制器的tabBar换成我们⾃⼰的tabBar,就会把tabBa* 6> 如何覆盖系统⾃带的tabBar?tabBar控制器的tabBar属性,是readly只读的,不能直接赋值。利⽤运⾏时机制发送消息:导⼊import, objc_msgSend(self,@selector(setTabBar:),customTabBar);*参数1:谁发送这个消息(self)。参数2:发送什么消息(名字叫setTabBar:),参数3:发送消息的参数。调⽤set⽅法,需要传⼀个参数,给成员属性赋值,这⾥传⾃定义的tabBar。利⽤KVC:[self setValue:customTabBar forKeyPath:@"tabBar"];* 7> 重写layoutSubViews布局⼦控件。判断是tabBarButton才需要调整位置添加UIView的分类,快速设置尺⼨和位置。模仿苹果官⽅做法,苹果官⽅bounds,frame都是分类声明的,在分类⽤@property只会⽣成⽅法的声明,不会⽣成成员属性,和⽅法的实现。好处:⾃动⽣成⽅法的声明,简便开发,不需要⾃⼰写⽅法声明。注意点:获取frame,改变宽⾼,不要通过获取bounds,改变宽⾼,单独设置bounds⼀个属性会影响到frame,使frame设置位置不准确根据tabBar的items属性,计算出tabBarButton的宽度。• 从第3个按钮开始,需要多添加⼀个按钮宽度,给中间加号按钮空出位置。---####⾃定义TabBar上添加加号按钮,显⽰在最中间,懒加载。* 1> layoutSubviews⽅法设置⼦控件尺⼨准确,因为这时候⽗控件的尺⼨确定了,才会去布局⼦控件。• 注意点:⽤分类设置center位置的时候,先设置尺⼨,要不然没有尺⼨,都不知道控件的中⼼点在哪,⽆法准确定位。---###以上是⼤概思路,⼀些注意点和操作说⼀下⾸先⾃定义的TabBar可以继承⾃TabBar 也可以继承⾃UIView,俩种继承的区别在于,第⼀种继承你可以使⽤系统TabBar的东西,对于readonly的东西⽤KVC的⽅式去设置。最第⼆种继承⾃UIVIew的思路是创建⼀个UIView覆盖在原来的TabBar上⾯,这种好处是这个View你可以随意的去设置,不受系统约束。那么我使⽤的demo是第⼆种⽅式。---####⾃定义tabBar,继承UIView,系统⾃带的UITabBar不好⽤* 1> 添加按钮,由控制器决定,⼏个控制器就⼏个按钮。提供⽅法给外界添加,默认系统⾃带的 tabBarButton,传⼊⼀个tabBarItem模型* 2> 添加⼀个控制器,就调⽤tabBar添加⼀个按钮,在添加控制器的代码写。* 3> 计算tabBar内部⼦控件,搞⼀个数组存放所有tabBarButton,⽅便计算他们的尺⼨。每次添加⼀个tabBarButton,就调⽤layoutsubViews重新计算尺⼨。注意:如果是在viewDIdLoad给⼀个控件添加⼦控件,就不会在添加⼦控件的时候调⽤layoutsubViews,如果不在v* 4> 调整tabBarButton⽂字和图⽚的尺⼨,假设图⽚占据按钮⾼度的0.6,宽度和按钮⼀样 * 1> 定义⽐例宏 IWTabBarButtonImageRadio 0.6 * 2> 设置按钮的基本属性,⽂字⼤⼩,⽂字和图⽚居中监听tabBarItem的属性,模型⼀改,视图就改完善badgeView,当传⼊的⽂字宽度⼤于背景图⽚的时候,清空背景图⽚,设置image,不显⽰⽂字。注意:加⼀个判断按钮只显⽰⽂字的时候,需要把背景和Image都清空,不清空image,在对象被销毁的时候,清空观察者。4.监听按钮的点击,切换控制器记录当前选中按钮,默认选中第⼀个,给按钮绑定tag。---过俩天上传代码到github上,喜欢的可以关注留意⼀下

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689265313a226461.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信