UITabbarController总结详解

友情链接自定义HBTabBarController(还在一点一点完善,代码简单适合快速开发初学者使用,谢谢使用并提出建议,后续会出一个swift版本并增加详细的README):https://github.com/HaiBinXiaoCheng/HBTabbarFrame

公司项目停滞不前,闲暇之余想要总结几个自己的以后用来快速开发的项目脚手架,其中之一当然是最大众的Tabbar样式。相信大部分人都会有自定义的Tabbar,但是今天既然说了事快速开发那肯定就是系统的UITabbarController,现学现卖,也是为了自己记忆
一:UITabbarController继承与UIViewController,但是有一个比需要注意的地方就是init方法的执行顺序,由于在调用Super init的时候调用了self.view所以在走完init方法之前会走viewDidLoad方法
二:基本使用方法

//创建并初始化UITabBarController
HBTabBarController *tabBarController = [[HBTabBarController alloc]init];
//设置标签栏文字和图片的颜色(默认会被填充成蓝色,不管你设置的图片颜色是什么,下面会介绍怎么图片不被填充)
tabBarController.tabBar.tintColor = [UIColor orangeColor];
//设置标签栏背景颜色
tabBarController.tabBar.barTintColor = [UIColor blackColor];
//设置标签栏风格(默认高度49)
tabBarController.tabBar.barStyle = UIBarStyleBlack;
//设置初始状态选中的下标
tabBarController.selectedIndex = 3;

//2.创建相应的子控制器(viewcontroller)
FirstViewController *firstVC = [FirstViewController new];
//导航栏文字
firstVC.navigationItem.title = @"通讯录";
//设置标签名称
firstVC.tabBarItem.title = @"通讯录";
//可以根据需求设置标签的的图标
firstVC.tabBarItem.image = [UIImage imageNamed:@"12-eye"];
//添加导航拦
UINavigationController *firstNC = [[UINavigationController alloc]initWithRootViewController:firstVC];

SecondViewController *secondVC = [SecondViewController new];
secondVC.navigationItem.title = @"朋友圈";
secondVC.tabBarItem.title = @"朋友圈";
secondVC.tabBarItem.image = [UIImage imageNamed:@"21-skull"];
UINavigationController *secondNC = [[UINavigationController alloc]initWithRootViewController:secondVC];

//3.添加到控制器
//特别注意:管理一组的控制器(最多显示五个,多余五个的话,包括第五个全部在更多模块里面,并且可以通过拖拽方式进行顺序编辑);
 NSArray *array = @[firstNC,secondNC]
tabBarController.viewControllers = array;

三:将tabBarController设置为rootViewController就可以展示基本的Tabbar了,下面说一下特别的地方

  1. 添加子控制器的方式[tabBarController addChildViewController:navC];
  2. 上面说的设置自定义的变换图片,不被其他颜色填充的方法
//设置控制器图片(使用imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal,不被系统渲染成蓝色(或者你刚才设置的tintColor颜色))
    firstVC.tabBarItem.image = [[UIImage imageNamed:@"icon_home_bottom_statist"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    firstVC.tabBarItem.selectedImage = [[UIImage imageNamed:@"icon_home_bottom_statist_hl"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
  1. TabbarItem的显示与隐藏
self.hidesBottomBarWhenPushed = YES;
self.hidesBottomBarWhenPushed = NO;
  1. 其它一下设置
c1.tabBarItem.badgeValue=@"123";//提醒数字
//设置标题的位置偏移
//@property (nonatomic, readwrite, assign) UIOffset titlePositionAdjustment;

 设置和获取标题的字体属性
- (void)setTitleTextAttributes:(nullable NSDictionary<NSString *,id> *)attributes forState:(UIControlState)state;
- (nullable NSDictionary<NSString *,id> *)titleTextAttributesForState:(UIControlState)state;

设置自定义标签
 //调用这个方法会弹出一个类似上面第二张截图的控制器,我们可以交换标签的布局顺序
- (void)beginCustomizingItems:(NSArray<UITabBarItem *> *)items;
//完成标签布局
 - (BOOL)endCustomizingAnimated:(BOOL)animated;
 //是否正在自定义标签布局
 - (BOOL)isCustomizing;

设置背景图片
 //设置导航栏背景图案
 @property(nullable, nonatomic,strong) UIImage *backgroundImage;
 //设置选中一个标签时,标签背后的选中提示图案 这个会出现在设置的item图案的后面
 @property(nullable, nonatomic,strong) UIImage *selectionIndicatorImage;
 //设置阴影的背景图案
 @property(nullable, nonatomic,strong) UIImage *shadowImage

 tabbar标签的属性
 //设置标签item的位置模式
 @property(nonatomic) UITabBarItemPositioning itemPositioning;
 //枚举如下
 typedef NS_ENUM(NSInteger, UITabBarItemPositioning) {
 UITabBarItemPositioningAutomatic,//自动
 UITabBarItemPositioningFill,//充满
UITabBarItemPositioningCentered,//中心
 } NS_ENUM_AVAILABLE_IOS(7_0);
 //设置item宽度
 @property(nonatomic) CGFloat itemWidth;
 //设置item间距
 @property(nonatomic) CGFloat itemSpacing;

 设置tabbar的风格和透明
 //风格 分黑白两种
 @property(nonatomic) UIBarStyle barStyle;
//是否透明效果
 @property(nonatomic,getter=isTranslucent) BOOL translucent;

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

推荐阅读更多精彩内容