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. java 实现多种排序

    public class Sort {        //交换两个数    private void swap(int[] arr, int i,int j){        int temp = a ...

  2. rsync命令来实现将服务器端的文件备份到客户端

    rsync命令来实现将服务器端的文件备份到客户端

  3. Ubuntu下SSH设置

    网上有很多介绍在Ubuntu下开启SSH服务的文章,但大多数介绍的方法测试后都不太理想,均不能实现远程登录到Ubuntu上,最后分析原因是都没有真正开启ssh-server服务.最终成功的方法如下: ...

  4. 【JS模式】单体模式

    <JavaScript模式> /** * 单体(Singleton)模式的思想在于保证一个特定类仅有一个实例.这意味着当您第二次使用同一个类创建新对象的时候,每次得到与第一次创建对象完全相 ...

  5. UVA 796 Critical Links(无向图求桥)

    题目大意:给你一个网络要求这里面的桥. 输入数据: n 个点 点的编号  (与这个点相连的点的个数m)  依次是m个点的   输入到文件结束. 桥输出的时候需要排序   知识汇总: 桥:   无向连通 ...

  6. SharePoint Server 2007 Enterprise Key

    正式版 key SN: Tkjcb-3wkhk-2ty2t-qymk2-9xm2y 这个版本也是通过Key来区分是否是测试版还是正式版的 也就是说你输入正式版的Key他就是正式版,输入Enterpri ...

  7. Shader Forge 武器流光

    使用Shader Forge 简直就是一种享受,相信会比BluePrint更好

  8. [JAVA关键字] static & final

    JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...

  9. KMP算法,Boyer-Moore算法

    http://www-igm.univ-mlv.fr/~lecroq/string/node19.html 首先看普通的串的模式匹配算法开始讲起,才能更深入的了解KMP算法及其优点. 1. 普通的串的 ...

  10. K - Candies(最短路+差分约束)

    题目大意:给N个小屁孩分糖果,每个小屁孩都有一个期望,比如A最多比B多C个,再多了就不行了,会打架的,求N最多比1多几块糖 分析:就是求一个极小极大值...试试看 这里需要用到一个查分约束的东西 下面 ...