iOS彩票项目--第一天,自定义TabBar控制器和自定义TabBar,自定义导航控制器

一、环境配置,和项目层次搭建

  

二、自定义TabBar

  • 项目中TabBar中的导航按钮美工给的图片太大,图片中包含了图片和文字。最主要的是TabBar上面的按钮图片尺寸是有规定的,当高度大于44的时候,就不会显示了

解决办法:自定义TabBar,继承自UIView,给UIView设置相应个数的按钮,自定义控件需要

1、自定义控件类 -- 自身有存放模型数据的集合,在数据的setter方法中定义子控件,给子控件设置相应的属性

2、模型类--这里的模型类借用了系统的UITabBarItem,因为系统设置TabBar样式就是用的UITabBarItem

--下面代码是给控制器的数据集合装配

-- 下面代码是将模型数据传递给自定义控件

-- 自定义控件中的属性,以及代理,代理的作用点击了TabBar上的按钮后,通知TabBar控制器跳转相应的控制器。

TabBar控制器的self.selectedIndex = index;可以控制跳转到具体的控制器,所以在为自定义TabBar布局的时候,将内部的按钮设置了tag,相应的tag对应自己的控制器

 

-- 自定义控件类内部实现代码

 1 @interface ChaosTabBar ()
 2 /** 记录选中的按钮 */
 3 @property(nonatomic,weak) UIButton *btn;
 4 @end
 5 
 6 @implementation ChaosTabBar
 7 
 8 - (void)setItems:(NSArray *)items
 9 {
10     // 遍历数据集合,添加按钮
11     _items = items;
12     for (UITabBarItem *barItem in items) {
13         UIButton *button = [ChaosTabBarButton buttonWithType:UIButtonTypeCustom];
14         
15         // 设置背景图片啊,不是设置iamge
16         [button setBackgroundImage:barItem.image forState:UIControlStateNormal];
17         [button setBackgroundImage:barItem.selectedImage forState:UIControlStateSelected];
18         // 给按钮添加点击事件
19         [button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];
20         // 绑定 tag 切换控制器的时候使用
21         button.tag = self.subviews.count;
22         [self addSubview:button];
23         
24         
25         // 默认选中第一个
26         if (self.subviews.count == 1) {
27             [self btnClick:button];
28         }
29     }
30 }
31 
32 // 点击按钮执行的方法
33 - (void)btnClick:(UIButton *)btn
34 {
35     // 取消上次选中的按钮
36     _btn.selected = NO;
37     btn.selected = YES;
38     
39     // 记录被选中的按钮
40     _btn = btn;
41     
42     // 通知代理 TabBarVC 跳转控制器
43     if ([_delegate respondsToSelector:@selector(tabBar:didClickBtn:)]) {
44         [_delegate tabBar:self didClickBtn:btn.tag];
45     }
46 }
47 
48 // 排列子控件
49 - (void)layoutSubviews
50 {
51     [super layoutSubviews];
52     
53     NSInteger count = self.subviews.count;
54     
55     CGFloat x = 0;
56     CGFloat y = 0;
57     CGFloat w = [UIScreen mainScreen].bounds.size.width / count;
58     CGFloat h = self.bounds.size.height;
59     
60     for (int i = 0; i < count; i++) {
61         UIButton *btn = self.subviews[i];
62         
63         x = i * w;
64         btn.frame = CGRectMake(x, y, w, h);
65     }
66 }
67 
68 @end
View Code

三、自定义导航控制器,设置所有继承自自定义导航控制器类的title的文字颜色

posted @ 2016-04-07 14:54  Chaos_G  阅读(389)  评论(0编辑  收藏  举报