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

  

二、自定义TabBar

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

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

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

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

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

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

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

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

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

 @interface ChaosTabBar ()
/** 记录选中的按钮 */
@property(nonatomic,weak) UIButton *btn;
@end @implementation ChaosTabBar - (void)setItems:(NSArray *)items
{
// 遍历数据集合,添加按钮
_items = items;
for (UITabBarItem *barItem in items) {
UIButton *button = [ChaosTabBarButton buttonWithType:UIButtonTypeCustom]; // 设置背景图片啊,不是设置iamge
[button setBackgroundImage:barItem.image forState:UIControlStateNormal];
[button setBackgroundImage:barItem.selectedImage forState:UIControlStateSelected];
// 给按钮添加点击事件
[button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];
// 绑定 tag 切换控制器的时候使用
button.tag = self.subviews.count;
[self addSubview:button]; // 默认选中第一个
if (self.subviews.count == ) {
[self btnClick:button];
}
}
} // 点击按钮执行的方法
- (void)btnClick:(UIButton *)btn
{
// 取消上次选中的按钮
_btn.selected = NO;
btn.selected = YES; // 记录被选中的按钮
_btn = btn; // 通知代理 TabBarVC 跳转控制器
if ([_delegate respondsToSelector:@selector(tabBar:didClickBtn:)]) {
[_delegate tabBar:self didClickBtn:btn.tag];
}
} // 排列子控件
- (void)layoutSubviews
{
[super layoutSubviews]; NSInteger count = self.subviews.count; CGFloat x = ;
CGFloat y = ;
CGFloat w = [UIScreen mainScreen].bounds.size.width / count;
CGFloat h = self.bounds.size.height; for (int i = ; i < count; i++) {
UIButton *btn = self.subviews[i]; x = i * w;
btn.frame = CGRectMake(x, y, w, h);
}
} @end

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

iOS彩票项目--第一天,自定义TabBar控制器和自定义TabBar,自定义导航控制器的更多相关文章

  1. iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果

    8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...

  2. iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

    一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...

  3. iOS彩票项目--第五天,新特性引导页的封装、返回按钮的自定义、导航控制器的滑动返回以及自定义滑动返回功能

    一.上次实现了在AppDelegate中通过判断app版本决定是否进入新特性页面,今天将AppDelegate中的一坨进行了封装.将self.window的根控制器到底应该为新特性界面,还是主页面,封 ...

  4. iOS彩票项目--第三天,搭建竞技场和发现,搭建幸运选号和我的彩票界面

    一.竞技场搭建--UISegmentedControl的使用 // 重写 自定义控制器的view - (void)loadView { UIImageView *imgView = [[UIImage ...

  5. [iOS微博项目 - 1.4] - 各种item NavigationBar & NavigationItem & BarButtonItem || TabBar & TabBarItem

    一.UINavigationItem1> 获得方式self.navigationItem // self是指控制器2> 作用可以用来设置当前控制器顶部导航栏的内容// 设置导航栏中间的内容 ...

  6. iOS彩票项目--第二天,自定义蒙版、封装活动菜单、自定义pop菜单

    一.自定义蒙版--封装控件,先想好外界怎么来调用,根据外界调用的方法,然后进入内部实现 在外部,调用蒙版的方法--[ChaosCover show]; [ChaosCover hide]; 内部实现 ...

  7. iOS彩票项目--第四天,新特性界面搭建,UICollectionViewController的初次使用

    一.新特性界面搭建的思路: 在AppDelegate加载主窗体的时候进行判断程序版本号,直接进入程序或者进入新特性展示界面 取出当前的版本号,与旧的版本号相比较(旧的版本号在进入程序的时候存起来 =& ...

  8. iOS彩票项目--第六天,运用MVC思想搭建设置界面(非storyboard方法)

    一.我只想说封装的思想很重要,MVC的思想也很重要,利用MVC思想搭建一下的界面 先说显示出来的cell,有三种(图中的两种,还有一种是最普通的,没有图片的),这种显示不同的cell,交给模型来处理, ...

  9. iOS彩票项目--第七天,初次读取json数据、KVC转模型技巧、运行时字典转模型以及初步对显示网页的操作并且跟踪标签

    一.初次读取json数据 二.KVC转模型技巧,这里的技巧主要解决的是字典中的key 与 模型中有的属性对应不起来的时候 的解决办法 <方法1> <方法2>运行时字典转模型,运 ...

随机推荐

  1. SDUT 2608 Alice and Bob (巧妙的二进制)

    Alice and Bob Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Alice and Bob like playing ...

  2. PS_Form个性化选择Block自动查询和查询条件排序实现(案例)

    2014-06-01 BaoXinjian

  3. CentOS7 安装配置DNS服务器

    一.安装 yum install bind 二.配置 1. /etc/named.conf // // named.conf // // Provided by Red Hat bind packag ...

  4. 在T-SQL语句中访问远程数据库

    1.启用Ad Hoc Distributed Queries 在使用openrowset/opendatasource前搜先要启用Ad Hoc Distributed Queries服务,因为这个服务 ...

  5. Spring注解方式配置说明

    1.<context:annotation-config/>与<context:component-scan base-package=”XX.XX”/> 在基于主机方式配置S ...

  6. python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解

    推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...

  7. 修改ultisnips的默认键

    把ultisnips修改和textmate一致. <tab>展开代码,再按<tab>跳转到下一个占位符,<shift+tab>跳转上一个占位符. 在vim配置文件中 ...

  8. vim设置文本宽度

    'textwidth' 'tw'        number  (default 0)                        local to buffer                   ...

  9. MySQL连接数超过限制的解决方法

    最近网站出现 User 数据库名称 has already more than 'max_user_connections' active connections 的报错,网站瘫痪.有必要研究下这个问 ...

  10. leetcode ---双指针+滑动窗体

    一:Minimum Size Subarray Sum(最小长度子数组的和O(N)) 题目: Given an array of n positive integers and a positive ...