UITabBarController自定义一

  • 首先在Appdelegate.m文件中将UITabBarController的子类设置为rootViewController,并设置其viewControllers
1.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2. // Override point for customization after application launch.
3. self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
4. self.window.backgroundColor = [UIColor whiteColor];
5. [self.window makeKeyAndVisible];
6.
7. JKBaseTabBarController *baseTabBarController = [self createRootController];
8.
9. self.window.rootViewController = baseTabBarController;
10.
11.
12. return YES;
13.}
14.
15.#pragma mark - 创建跟视图
16.-(JKBaseTabBarController *)createRootController{
17. JKBaseTabBarController *baseTabBarController = [[JKBaseTabBarController alloc] init];
18.
19. // items
20.// NSArray *titles = @[@"总览",@"账户",@"图表"];
21.
22. JKGeneralViewController *general = [[JKGeneralViewController alloc] init];
23. general.tabBarItem.title = @"总览";
24. general.tabBarItem.image = [[UIImage imageNamed:@"overview_normal"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
25. general.tabBarItem.selectedImage = [[UIImage imageNamed:@"overview_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
26.
27. JKAccountViewController *account = [[JKAccountViewController alloc] init];
28. account.tabBarItem.title = @"账户";
29. account.tabBarItem.image = [[UIImage imageNamed:@"account_normal"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
30. account.tabBarItem.selectedImage = [[UIImage imageNamed:@"account_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
31.
32. JKGraphViewController *graph = [[JKGraphViewController alloc] init];
33. graph.tabBarItem.title = @"图表";
34. graph.tabBarItem.image = [[UIImage imageNamed:@"graph_normal"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
35. graph.tabBarItem.selectedImage = [[UIImage imageNamed:@"graph_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
36.
37. baseTabBarController.viewControllers = @[general,account,graph];
38.
39. return baseTabBarController;
40.}
41.
42.
  • 然后在UITabBarController子类的viewWillAppear方法中将tabBar的子视图隐藏掉,换上自定义的视图
1.#pragma mark - 自定义
2.-(void)viewWillAppear:(BOOL)animated{
3. [super viewWillAppear:animated];
4. self.tabBar.barTintColor = [UIColor blackColor];
5.
6. // 先将系统自带的隐藏
7. for (UIView *view in self.tabBar.subviews) {
8. view.hidden = YES;
9. }
10.
11. NSArray *controllers = self.viewControllers;
12.
13. // 根据有多少项计算宽度
14. CGFloat h = self.tabBar.bounds.size.height;
15. CGFloat w = h;
16. CGFloat interval = (s_w - controllers.count * h) / (controllers.count + 1);
17.
18. for (int i = 0; i < controllers.count; i++) {
19. UITabBarItem *item = ((UIViewController *)controllers[i]).tabBarItem;
20. UIButton *btn = [[UIButton alloc] initWithFrame:(CGRect){interval + i * (w + interval),0,w,h}];
21.
22. btn.imageEdgeInsets = UIEdgeInsetsMake(-15, 0, 0, 0);
23.
24. [btn setImage:item.image forState:UIControlStateNormal];
25. [btn setImage:item.selectedImage forState:UIControlStateSelected];
26.
27. btn.titleEdgeInsets = UIEdgeInsetsMake(30, -35, 0, 0);
28. btn.titleLabel.font = [UIFont systemFontOfSize:14.0f];
29. [btn setTitle:item.title forState:UIControlStateNormal];
30. [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
31. [btn setTitleColor:lightBlueColor forState:UIControlStateSelected];
32.
33.
34. btn.tag = i + 200;
35. [btn addTarget:self action:@selector(changeViewController:) forControlEvents:UIControlEventTouchUpInside];
36.
37.
38. if (i == 0) {
39. btn.selected = YES;
40. }
41.
42. [self.tabBar addSubview:btn];
43. }
44.}
45.
46.-(void)changeViewController:(UIButton *)sender{
47. if (!sender.selected) {
48. sender.selected = !sender.selected;
49. self.selectedIndex = sender.tag - 200;
50.
51. for (UIView *view in self.tabBar.subviews) {
52. if ([view isKindOfClass:[UIButton class]] && view.tag != sender.tag) {
53. UIButton *btn = (UIButton *)view;
54. btn.selected = NO;
55. }
56. }
57. }
58.
59.}
60.
  • 效果如图

    *没有上诉自定义的话也可以通过
    [general.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor redColor]} forState:UIControlStateNormal];方法改变title的颜色
 

UITabBarController自定义一的更多相关文章

  1. UITabBarController自定义二之xib

    UITabBarController自定义二之xib 新建一个xib文件 在UITabBarController的子类方法viewDidLoad方法中加载xib 1.-(void)viewDidLoa ...

  2. UI学习笔记---第十二天UITabBarController

    页签视图控制器-UITabBarController   自定义UITabBar     block高级 一.UITabBarController 结构为三层:Tab bar controller v ...

  3. UIVIewController自定义切换效果-b

      之前介绍动画时提过UIView的转场动画,但是开发中我们碰到更多的viewController的切换,ios中常见的viewcontroller切换有四种:模态视图,导航栏控制器,UITabBar ...

  4. UI入门指引

    1. iOS学习路线: C语言:数据类型.流程控制.函数.指针.字符串.结构体.枚举.预处理: OC:面向对象.内存管理.分类.协议.Block.KVC/KVO.Foundation框架: iOS基础 ...

  5. iOS完整学习步骤

    一  C语言 1.1基本数据类型和基本运算 1.2 函数 数组 字符串 指针 1.3 预处理指令 1.4结构体 枚举 1.5 文件操作 内存管理 二 Objective - C 2.1 面向对象 2. ...

  6. UI-了解ISO

    1. iOS学习路线: C语言:数据类型.流程控制.函数.指针.字符串.结构体.枚举.预处理: OC:面向对象.内存管理.分类.协议.Block.KVC/KVO.Foundation框架: iOS基础 ...

  7. 自定义UITabBarController标签视图控制器

    首先创建一个类,继承自UItabBarController 然后在.m文件中: 这里我有两个宏定义: #define WIDTH (myView.frame.size.width / 4) //我在写 ...

  8. IOS开发之自定义UITabBarController

    UITabBarController是开发中经常会用到的一个视图控制器,但是默认的UITabBarController经常不能够完全满足我们的需求,所以我们经常需要自定义一个UITabBarContr ...

  9. 自定义UITabbarController控制器

    自定义UITabbarController控制器 这是定制UITabbarController的基本原理,没有进行功能性封装. 效果:   源码地址: https://github.com/YouXi ...

随机推荐

  1. 如何解决设置Session保存在StateServer后引起WebService/WebMethod无法异步获取Session

    项目中有一个文件上传功能,需要显示文件上传进度.于是使用PageMethods 调用WebService/WebMethod . 在demo中测试一切正常.但是转移到项目中之后无法异步刷新文件上传进度 ...

  2. (转载)PHP strtotime函数详解

    (转载)http://www.jb51.net/article/21495.htm strtotime函数是一个很好的函数,灵活的运用它,会给你的工作带来不少方便.但PHP的手册中却对此函数的参数没作 ...

  3. 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器

    963. [NOI2012] 随机数生成器 ★★   输入文件:randoma.in   输出文件:randoma.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 栋 ...

  4. Linux下动态库的使用

    1.生成动态库: gcc -fPIC -shared -o libdemo.so demo.c 考虑程式库major的升级会破坏兼容性:而minior的升级则可能不会,一般建议用以下方式来生成动态库. ...

  5. C# 基础小知识之yield 关键字 语法糖

    原文地址:http://www.cnblogs.com/santian/p/4389675.html 对于yield关键字我们首先看一下msdn的解释: 如果你在语句中使用 yield 关键字,则意味 ...

  6. 《University Calculus》-chaper12-多元函数-拉格朗日乘数法

    求解条件极值的方法:拉格朗日乘数法 基于对多元函数极值方法的了解,再具体的问题中我们发现这样一个问题,在求解f(x,y,z)的极值的时候,我们需要极值点落在g(x,y,z)上这种对极值点有约束条件,通 ...

  7. poj1042

    题目大意:去捕鱼 约翰去参加一个垂钓旅行,他有h小时可以使用在该地区有n (2 <= n <= 25) 个湖泊可以沿着一个单一的路到达,约翰从湖泊1开始,但是它可以在任何湖泊结束他如果想, ...

  8. 图解向hadoop分布式文件系统写文件的工作流程

    网上看到一张关于hadoop分布式文件系统(hdfs)的工作原理的图片,其实主要是介绍了向hdfs写一个文件的流程.图中的流程已经非常清晰,直接上图 好吧,博客园告诉我少于200字的文章不允许发布到网 ...

  9. 存储的一些基本概念(HBA,LUN)

    有些新手总是在各式各样的概念里绕来绕去,弄的不亦乐乎.所以我就把我的一些理解写了下来,供您参考.我说的不局限于任何一种具体产品和厂家,也可能有些说法和某些厂家的说法不一样,但是我觉得应该算的上是本原的 ...

  10. POI使用详解

    Apache POI使用详解 1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案 ...