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. Unity3d开发IOS游戏 基础

    Unity3d开发IOS游戏 基础 @阿龙 -  649998群 1.先说明两个问题,我在WIN7下面的U3D里面,用了雅黑字体,但是导出为ios后,字体就看不见了,这是为什么呢?这是需要在MAC下找 ...

  2. 转一篇NGINX+UWSGI+PYTHON+DJANGO部署文档

    高远弄的,,专业,明晓..感谢哈哈. http://blog.csdn.net/tmpbook/article/details/42873667

  3. Qt for Mac:发布程序(widgets和quick2)

    当你用Qt开发好程序后,是不是会很期待将你的成果分享给你的小伙伴 可是Qt的库并不是OS X标配的,所以我们要自己去复制库到app包里,才可以让app在其他未安装Qt的电脑上运行. 比较幸运的是,Qt ...

  4. 【ZOJ】3430 Detect the Virus

    动态建树MLE.模仿别人的代码模板各种原因wa后,终于AC. #include <iostream> #include <cstdio> #include <cstrin ...

  5. -_-#【Node】Express 400 Error: ENOENT, open

    Express 400 Error: ENOENT, open cd alleatisland, node app来启动

  6. kafka log4j配置

    kafka日志文件分为5种类型,依次为:controller,kafka-request,server,state-change,log-cleaner,不同类型log数据,写到不同文件中: 区别于c ...

  7. Java Annotation 必须掌握的特性

    什么是Annotation? Annotation翻译为中文即为注解,意思就是提供除了程序本身逻辑外的额外的数据信息.Annotation对于标注的代码没有直接的影响,它不可以直接与标注的代码产生交互 ...

  8. 使用jquery trigger 触发a标签的click事件取代window.open方法

    var ohtml='<div class="friend-dialog tac pt15 pb20">'+ '<div class="f-h32&qu ...

  9. ActionScript 3.0日期与时间管理(Date类)

    ,6)); var now_1:Date=new Date(); trace(now_1.getHours());    /*输出结果会根据设置和测试时间不同而有                    ...

  10. bzoj2049: [Sdoi2008]Cave 洞穴勘测

    lct入门题? 得换根了吧TAT 这大概不是很成熟的版本.. #include<iostream> #include<cstring> #include<cstdlib& ...