UITabBarController的使用_st646889325的博客-程序员宅基地

技术标签: 导航  

UITabBarController 是多页面视图控制器切换控制器

一、主要使用方法,即属性设置:

1、视图控制器集合:viewControllers

2、切换视图属性:tabbar

2-1tabbar 背景颜色:backgroundColor

2-2tabbar 背景图标:backgroundImage

2-3tabbar 标题(选中,或非选中状态):UITabBarItem- (void)setTitleTextAttributes:(nullable NSDictionary<NSString *,id> *)attributes forState:(UIControlState)state

2-4tabbar 图标(选中,或非选中状态):UITabBarItem- (void)setFinishedSelectedImage:(nullable UIImage *)selectedImage withFinishedUnselectedImage:(nullable UIImage *)unselectedImage

或进行 2-32-4 属性的统一设置 方法如:

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 设置标题,未选中状态图标,选中状态图标  
  2. UITabBarItem *barItem = [[UITabBarItem alloc] initWithTitle:title image:imageNormal selectedImage:imageSelected];  
  3. xxxViewController.tabBarItem = barItem;  
[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 设置标题字体颜色  
  2. [[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blackColor]} forState:UIControlStateNormal];  
  3. [[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor orangeColor]} forState:UIControlStateSelected];  
[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 设置标题字体大小  
  2. [[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:8.0]} forState:UIControlStateNormal];  
[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 设置标题字体偏移  
  2. [[UITabBarItem appearance] setTitlePositionAdjustment:UIOffsetMake(0.0, -8.0)];  
[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 设置图标选中时颜色  
  2. [[UITabBar appearance] setTintColor:[UIColor redColor]];  

3、默认选中视图控制器:selectedIndex

     

二、使用注意事项:

1、设置视图控制器集合时,是 UINavigationController 导航栏控制器集合;

2、设置视图控制器集合时,通常小于等于 5  视图控制器,超过 5 个时系统默认生成一个 more 的控制器页面,用于操作多余的视图控制器

3、视图控制器导航栏标题设置时,注意使用:" self.navigationItem.title = @"xxx"; ",而不使用" self.title = @"xxx"; ",避免影响 UITabBarController  tabbar 标题的设置。

4、当要显示下一个视图控制器,且需要隐藏 tabbarController 控制器时,设置视图控制器的属性 hidesBottomBarWhenPushed 值为YES,如:

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. UIViewController *nextVC = [[UIViewController alloc] init];  
  2. nextVC.hidesBottomBarWhenPushed = YES;  
  3. [self.navigationController pushViewController:nextVC animated:YES];  

5、第一次初始化时,会出现设置的 tabbar 图标颜色异常,设置属性 tintColor 与图标颜色一致后,则不会,如:

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. [[UITabBar appearance] setTintColor:[UIColor redColor]];  

6tabbar 标题设置后出现偏移情况,即靠近底端,可通过设置属性 titlePositionAdjustment 进行调整,如:

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. [[UITabBarItem appearance] setTitlePositionAdjustment:UIOffsetMake(0.0, -8.0)];  

7、设置 badgeValue 标识属性时,特别是在 viewController 中设置时,注意使用方法为" self.navigationController.tabBarItem.badgeValue = @"0"; ",而不是" self.tabBarItem.badgeValue = @"0"; ",否则无效,如:

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. - (void)viewWillAppear:(BOOL)animated  
  2. {  
  3.         NSInteger index = arc4random() % 2;  
  4.         if (0 == index)  
  5.         {  
  6.             // self.tabBarItem.badgeValue = nil; // 无效  
  7.             self.navigationController.tabBarItem.badgeValue = nil;  
  8.         }  
  9.         else  
  10.         {  
  11.             index = arc4random() % 100 + 1;  
  12.             // self.tabBarItem.badgeValue = [NSString stringWithFormat:@"%ld", index]; // 无效  
  13.             self.navigationController.tabBarItem.badgeValue = [NSString stringWithFormat:@"%ld", index];  
  14.         }  
  15. }  

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 1 创建视图控制器  
  2. MessageViewController *messageVC = [[MessageViewController alloc] init];  
  3. UINavigationController *messageNav = [[UINavigationController alloc] initWithRootViewController:messageVC];  
  4. ContacterViewController *contacterVC = [[ContacterViewController alloc] init];  
  5. UINavigationController *contacterNav = [[UINavigationController alloc] initWithRootViewController:contacterVC];  
  6. DynamicViewController *dynamicVC = [[DynamicViewController alloc] init];  
  7. UINavigationController *dynamicNav = [[UINavigationController alloc] initWithRootViewController:dynamicVC];  
  8. // 视图控制器数组  
  9. NSArray *controllerArray = @[messageNav, contacterNav, dynamicNav];  

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 2 创建tabbarController控制器  
  2. UITabBarController *tabbarController = [[UITabBarController alloc] init];  
  3. // 属性设置  
  4. // 设置默认被选中视图控制器  
  5. tabbarController.selectedIndex = 0;  
  6. // 设置切换视图 tabBar 属性  
  7. // 1 打开用户交互  
  8. tabbarController.tabBar.userInteractionEnabled = YES;  
  9. // 2 设置背景颜色  
  10. tabbarController.tabBar.backgroundColor = [UIColor whiteColor];  
  11. // 3 设置背景图片  
  12. tabbarController.tabBar.backgroundImage = [UIImage imageNamed:@"background"];  
  13. // 选中时的背景图片  
  14. tabbarController.tabBar.selectionIndicatorImage = [UIImage imageNamed:@"backgroundSelected"];  
  15. // 4 设置按钮标题、常规图标、选中时图标  
  16. NSArray *titleArray = @[@"消息"@"联系人"@"动态"];  
  17. NSArray *imageNArray = @[[UIImage imageNamed:@"messageNormal"], [UIImage imageNamed:@"contacterNormal"], [UIImage imageNamed:@"dynamicNormal"]];  
  18. NSArray *imageSAarray = @[[UIImage imageNamed:@"messageSelected"], [UIImage imageNamed:@"contacterSelected"], [UIImage imageNamed:@"dynamicSelected"]];  


[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. /**************************************/  
  2.       
  3. // 更多视图控制器的情况  
  4. UIViewController *vc4 = [[UIViewController alloc] init];  
  5. vc4.title = @"vc4";  
  6. UINavigationController *nav4 = [[UINavigationController alloc] initWithRootViewController:vc4];  
  7. UIViewController *vc5 = [[UIViewController alloc] init];  
  8. vc5.title = @"vc5";  
  9. UINavigationController *nav5 = [[UINavigationController alloc] initWithRootViewController:vc5];  
  10. UIViewController *vc6 = [[UIViewController alloc] init];  
  11. vc6.title = @"vc6";  
  12. UINavigationController *nav6 = [[UINavigationController alloc] initWithRootViewController:vc6];  
  13. UIViewController *vc7 = [[UIViewController alloc] init];  
  14. vc7.title = @"vc7";  
  15. UINavigationController *nav7 = [[UINavigationController alloc] initWithRootViewController:vc7];  
  16. UIViewController *vc8 = [[UIViewController alloc] init];  
  17. vc8.title = @"vc8";  
  18. UINavigationController *nav8 = [[UINavigationController alloc] initWithRootViewController:vc8];  
  19. // 视图控制器数组  
  20. NSArray *controllerArray = @[messageNav, contacterNav, dynamicNav, nav4, nav5, nav6, nav7, nav8];  
  21. NSArray *titleArray = @[@"消息"@"联系人"@"动态"@"nav4"@"nav5"@"nav6"@"nav7"@"nav8"];  
  22. NSArray *imageNArray = @[[UIImage imageNamed:@"messageNormal"], [UIImage imageNamed:@"contacterNormal"], [UIImage imageNamed:@"dynamicNormal"], [UIImage imageNamed:@"dynamicNormal"], [UIImage imageNamed:@"dynamicNormal"], [UIImage imageNamed:@"dynamicNormal"], [UIImage imageNamed:@"dynamicNormal"], [UIImage imageNamed:@"dynamicNormal"]];  
  23. NSArray *imageSAarray = @[[UIImage imageNamed:@"messageSelected"], [UIImage imageNamed:@"contacterSelected"], [UIImage imageNamed:@"dynamicSelected"], [UIImage imageNamed:@"contacterSelected"], [UIImage imageNamed:@"contacterSelected"], [UIImage imageNamed:@"contacterSelected"], [UIImage imageNamed:@"contacterSelected"], [UIImage imageNamed:@"contacterSelected"]];  
  24.       
  25. /**************************************/  

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 5 设置视图控制器  
  2. tabbarController.viewControllers = controllerArray;  

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 6 设置 tabbar 标题、图标  
  2. // 方法1  
  3. NSArray *items = tabbarController.tabBar.items;  
  4. NSInteger count = items.count;  
  5. for (int index = 0; index < count; index++)  
  6. {  
  7.         NSString *title = titleArray[index];  
  8.         UIImage *imageN = imageNArray[index];  
  9.         UIImage *imageS = imageSAarray[index];  
  10.           
  11.         UITabBarItem *aItem = [items objectAtIndex:index];  
  12.         // 标题设置(字体偏移、字体大小、字体颜色)  
  13.         aItem.title = title;  
  14. //        aItem.titlePositionAdjustment = UIOffsetMake(0.0, -10.0);  
  15. //        [aItem setTitleTextAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:8.0]} forState:UIControlStateNormal];  
  16. //        [aItem setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor blackColor]} forState:UIControlStateNormal];  
  17. //        [aItem setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]} forState:UIControlStateSelected];  
  18.         // 图标设置  
  19. //        [aItem setFinishedSelectedImage:imageS withFinishedUnselectedImage:imageN];  
  20.         aItem.image = imageN;  
  21.         aItem.selectedImage = imageS;  
  22. }  

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 方法2  
  2. UITabBarItem *messageBarItem = [[UITabBarItem alloc] initWithTitle:titleArray[0] image:imageNArray[0] selectedImage:imageSAarray[0]];  
  3. [messageBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor blackColor]} forState:UIControlStateNormal];  
  4. [messageBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]} forState:UIControlStateSelected];  
  5. messageBarItem.badgeValue = @"10";  
  6. messageVC.tabBarItem = messageBarItem;  
  7. UITabBarItem *contacterBarItem = [[UITabBarItem alloc] initWithTitle:titleArray[1] image:imageNArray[1] selectedImage:imageSAarray[1]];  
  8. [contacterBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor blackColor]} forState:UIControlStateNormal];  
  9. [contacterBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]} forState:UIControlStateSelected];  
  10. contacterBarItem.badgeValue = @"3";  
  11. contacterVC.tabBarItem = contacterBarItem;  
  12. UITabBarItem *dynamicBarItem = [[UITabBarItem alloc] initWithTitle:titleArray[2] image:imageNArray[2] selectedImage:imageSAarray[2]];  
  13. [dynamicBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor blackColor]} forState:UIControlStateNormal];  
  14. [dynamicBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]} forState:UIControlStateSelected];  
  15. dynamicBarItem.badgeValue = @"21";  
  16. dynamicVC.tabBarItem = dynamicBarItem;  

[objc]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. // 设置字体颜色  
  2. [[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blackColor]} forState:UIControlStateNormal];  
  3. [[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor orangeColor]} forState:UIControlStateSelected];  
  4. // 设置字体大小  
  5. [[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:8.0]} forState:UIControlStateNormal];  
  6. // 设置字体偏移  
  7. [[UITabBarItem appearance] setTitlePositionAdjustment:UIOffsetMake(0.0, -8.0)];  
  8. // 设置图标选中时颜色  
  9. [[UITabBar appearance] setTintColor:[UIColor redColor]];  


   


   


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/st646889325/article/details/52814613

智能推荐

记一次springcloud构建项目读取不了bootstrap文件_xinxin之火的博客-程序员宅基地

这里写自定义目录标题记一次springcloud构建项目读取不了bootstrap文件记一次springcloud构建项目读取不了bootstrap文件由于我是基于之前的项目重构的新项目,spingboot改为springcloud框架,改造完后运行,运行一直读取不到新加的bootstrap,yml文件 ,一直contect timeout localhost:8848。然后我打开编译后的target文件,发现根本没有把resouce文件重点 booitstrap.yml编译进去,坑了很久,终于找到原因

android glide 4旋转图片,Glide入门教程——21.如何旋转图片_苏南影的博客-程序员宅基地

Glide — 如何旋转图片不久前,我们有一个问题:如何用Glide旋转图像,由于Picasso提供此即学即用的功能。不幸的是,Glide不提供这一点方法调用,但在这个博客文章中,我们将展示如何几乎一样容易地使它。如果您需要更多Glide的内容,浏览我们博客文章列表上的主题:Glide 系列概览如何用Glide旋转图片实际上android.graphics.Matrix类正好提供了我们需要的。旋转...

python怎么建立替换_python中replace怎么进行替换_郑小武的博客-程序员宅基地

replace()方法返回当前old换成new,可选择的替代限制到最大数量的字符串的副本。语法:str.replace(old,new[,max])参数old – 这是要进行更换的旧子串。new – 这是新的子串,将取代旧的子字符串(子串可以为空)。max – 如果这个可选参数max值给出,仅第一计数出现被替换。相关推荐:《Python教程》返回值此方法返回字符串的拷贝与旧子串出现的所有被新的...

JUC学习笔记-07-读写锁的使用_小小学渣的博客-程序员宅基地

读写锁ReadWriteLock的特性:读写锁的使用场合是:读取数据的频率远大于修改共享数据的频率。可以提高并发性能。读锁允许多个reader线程同时持有,而写锁最多只能有一个线程持有。如果一个线程已经持有了写锁,则可以再持有读或者写锁即可重入。如果一个线程已经持有了读锁,则在释放该读锁之前,不能再持有写锁。如果当前线程是读状态,那么其他线程也同时马上可以获取读锁,但若想获取写锁,就会禁止进入转而进入等待队列,后面想要获取读锁或者写锁的线程也必须进入等待队列。等正在工作的线程释放锁才能获取到。

Ubuntu下搭建svn服务器_尨昰的博客-程序员宅基地

安装软件包:sudo apt-get install subversion之后选择SVN服务文件及配置文件的放置位置(这个地方自己决定,如果你用Apache 的话可以放在www下面)cd /srvsudo mkdir svnsvn版本仓库叫testcd /srv/svnsudo mkdir test目录建好

python各种Error记录_weixin_45804756的博客-程序员宅基地

ErrorValueError二级目录三级目录ValueError1、ValueError:The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() | a和b是两个数组时,判断if (ab)时出错,应改为 (ab).any() #只要有一个TRUE,就返回TRUE或a==b.all() #必须都是True,才返回True,否则返回False|ValueErr

随便推点

python sys.stdin.buffer_python – 为sys.stdin设置较小的缓冲区大小?_weixin_39850699的博客-程序员宅基地

我正在运行memcached与以下bash命令模式:memcached -vv 2&gt;&amp;1 | tee memkeywatch2010098.log 2&gt;&amp;1 | ~/bin/memtracer.py | tee memkeywatchCounts20100908.log尝试和跟踪无与伦比的获取到平台的密钥平台。memtracer脚本在下面并按照需要工作,有一个小问题。看...

C++ 单例模式 与线程安全_滴水猿的博客-程序员宅基地

单例模式:作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。  单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。在下面 的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对 

phpstudy mysql存中文_phpstudy中怎么在数据库中存数据_GO厂长的博客-程序员宅基地

phpstudy在数据库中存数据的方法:(1)后台文件连接好数据库(2)接收表单的数据,构建sql语句(3)执行sql语句,观察执行结果示例:用户在前端页面输入的用户名和手机号码,点击提交后后端判断手机号码是否已经存在。如果不存在,那么插入数据库到数据库,并将插入结果(时候插入成功)返回前段页面。需求分析:1. 创建一个html页面用来输入用户名和手机号码,创建一个php页面处理数据;2. htm...

Android studio 百度地图SDK之地图定位与运动轨迹绘制_响当当的苹果的博客-程序员宅基地_android百度地图轨迹绘制

百度地图定位与运动轨迹Android开发的前期准备地图图层显示与定位运动轨迹的简单绘制Android开发的前期准备Android配置在百度地图SDK官网上有详细的说明。具体可以参考官网的教程,笔者觉得官网的总结的很细,笔者初学,就不耍大刀了。以下就是官网地址:https://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/ak当然,按照官网上的步骤,初学会有一些小问题,稍后会在另一篇文章中展现笔者在初学遇见的问题与解

nssl1270-创世纪【树形dp,基环树】_QuantAsk的博客-程序员宅基地

正题题目大意每个物品有一个可以限制的物品,要求一个集合内所有的物品都有一个不在集合内物品限制。求这个集合可以保护的最多物品解题思路类似没有上司的舞会其实就是在基环树森林,我们可以利用二次树形dp的方法。先找到环,然后强行将环断开进行一次dp,然后强行连上进行一次dp,两个答案的最小值就得这棵树的最大物品。其实也可以贪心,这里就不放了。code#include&amp;lt;cstd...

php打开js文件怎么打开新窗口打开,js打开新窗口,js打开居中窗口,js打开自定义窗口..._大机灵聪明绝顶的博客-程序员宅基地

var isIE=!!window.ActiveXObject; //是否IE浏览器var isIE6=isIE&amp;&amp;!window.XMLHttpRequest; //是否IE6浏览器var isIE7=isIE&amp;&amp;!isIE6&amp;&amp;!isIE8; //是否IE7浏览器var isIE8=isIE&amp;&amp;!!document....

推荐文章

热门文章

相关标签