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对应自己的控制器
-- 自定义控件类内部实现代码
- @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,自定义导航控制器的更多相关文章
- iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果
8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...
- iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用
一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...
- iOS彩票项目--第五天,新特性引导页的封装、返回按钮的自定义、导航控制器的滑动返回以及自定义滑动返回功能
一.上次实现了在AppDelegate中通过判断app版本决定是否进入新特性页面,今天将AppDelegate中的一坨进行了封装.将self.window的根控制器到底应该为新特性界面,还是主页面,封 ...
- iOS彩票项目--第三天,搭建竞技场和发现,搭建幸运选号和我的彩票界面
一.竞技场搭建--UISegmentedControl的使用 // 重写 自定义控制器的view - (void)loadView { UIImageView *imgView = [[UIImage ...
- [iOS微博项目 - 1.4] - 各种item NavigationBar & NavigationItem & BarButtonItem || TabBar & TabBarItem
一.UINavigationItem1> 获得方式self.navigationItem // self是指控制器2> 作用可以用来设置当前控制器顶部导航栏的内容// 设置导航栏中间的内容 ...
- iOS彩票项目--第二天,自定义蒙版、封装活动菜单、自定义pop菜单
一.自定义蒙版--封装控件,先想好外界怎么来调用,根据外界调用的方法,然后进入内部实现 在外部,调用蒙版的方法--[ChaosCover show]; [ChaosCover hide]; 内部实现 ...
- iOS彩票项目--第四天,新特性界面搭建,UICollectionViewController的初次使用
一.新特性界面搭建的思路: 在AppDelegate加载主窗体的时候进行判断程序版本号,直接进入程序或者进入新特性展示界面 取出当前的版本号,与旧的版本号相比较(旧的版本号在进入程序的时候存起来 =& ...
- iOS彩票项目--第六天,运用MVC思想搭建设置界面(非storyboard方法)
一.我只想说封装的思想很重要,MVC的思想也很重要,利用MVC思想搭建一下的界面 先说显示出来的cell,有三种(图中的两种,还有一种是最普通的,没有图片的),这种显示不同的cell,交给模型来处理, ...
- iOS彩票项目--第七天,初次读取json数据、KVC转模型技巧、运行时字典转模型以及初步对显示网页的操作并且跟踪标签
一.初次读取json数据 二.KVC转模型技巧,这里的技巧主要解决的是字典中的key 与 模型中有的属性对应不起来的时候 的解决办法 <方法1> <方法2>运行时字典转模型,运 ...
随机推荐
- 【php】基础学习2
主要包括数组的学习,具体如下: <html xmlns=http://www.w3.org/1999/xhtml> <head> <meta http-equiv=Con ...
- linux下安装nginx和配置
1.系统:centos6.8 2.安装准备: 安装nginx前,我们首先要确保系统安装了g++.gcc.openssl-devel.pcre-devel和zlib-devel软件,可通过如图所示命令进 ...
- 编程中的幂等性 — HTTP幂等性
幂等(idempotent.idempotence)是一个数学与计算机学概念,常见于抽象代数中. 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同.幂等函数,或幂等方法, ...
- 莫名其妙的js脚本文件引用不到
今天遇到一个很奇怪的问题,在页面中引用的脚本文件,引用路径没有问题,而且在很多浏览器中都测试没有问题,包括Win8 Modren UI下的IE11也同样没有问题,唯独Win8桌面版的IE11无法引用. ...
- 关于 二维码 与 NFC 之间的出身贫贱说
关于 二维码 与 NFC 之间的出身贫贱说 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 ...
- 批处理学习笔记12 - 拷贝大文件到特定目录 Copy命令
~z 获取文件容量大小,配合变量使用 copy 拷贝命令, copy 原地址 新地址 ok,下面上代码 @echo off setlocal enabledelayedexpansion for %% ...
- [elk]停电日志离线恢复故障处理-elk环境极速搭建
es数据手动导入 周末停电了两天,发现两天的日志没导入: 原因: 1. elk开启没设启动 2.日志入库时间是当前时间,不是日志本身的time字段 - 导入步骤 1. 先把日志拖下来 2. 事先需要干 ...
- 【Android】6.2 AlertDialog(警告对话框)
分类:C#.Android.VS2015: 创建日期:2016-02-08 一.简介 AlertDialog也是Android系统当中常用的对话框之一. 在一个AlertDialog中,可以有一个Bu ...
- hdoj 1027 Ignatius and the Princess II 【逆康托展开】
Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ( ...
- QT中布局器的addStretch函数使用效果
QBoxLayout中addStretch 函数说明: void QBoxLayout::addStretch(int stretch = 0) Adds a stretchable space (a ...