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

  

二、自定义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. 【LeetCode】79. Word Search

    Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be constr ...

  2. SDL的基础知识以及利用SDL播放视频

    原文地址:http://blog.csdn.net/i_scream_/article/details/52714378 此博文相关知识点从雷神的博客以及视频学习,截图也是用了他的课件, 雷神博客地址 ...

  3. ADF_ADF Framework基本概念(概念)

    2014-01-01 Created By BaoXinjian

  4. Linux内核同步 - Read/Write spin lock

    一.为何会有rw spin lock? 在有了强大的spin lock之后,为何还会有rw spin lock呢?无他,仅仅是为了增加内核的并发,从而增加性能而已.spin lock严格的限制只有一个 ...

  5. Django修改用户名密码的方法

    1.python manage.py shell 2.from django.contrib.auth.models import User 3.user=User.objects.get(usern ...

  6. [na]tftp从linux下载文件

    1,背景: 当我们ssh到一台linux上时候,从linux上下载一些文件,方案如下: 1.1通过sftp:通过win7 ftp客户端连接到linux去下载文件. 1.2通过tftp 2,问题 有些l ...

  7. Centos7安装TensorFlow

    TensorFlow也火了一段时间,想想既然要研究NLP.为什么不好好应用一下Google开源的Deep Learning平台呢,一切还是先从搭建好开发环境開始. 非常多大神们也做了这方面的工作.汲取 ...

  8. 转:python常用运维脚本实例

    python常用运维脚本实例 转载  file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函 ...

  9. 常用的正则表达式C#工具类

    Regex类实现了一些特殊功能数据检查,正则表达式的一些常用的功能,集成至该类中. public class RegexDao { private RegexDao() { } private sta ...

  10. angular学习笔记(十五)-module里的'服务'

    本篇介绍angular中的模块:module 在笔记(二)http://www.cnblogs.com/liulangmao/p/3711047.html里已经讲到过模块,这篇主要讲模块的 '服务' ...