2015年07月13日第九天笔记

QQ好友列表细节归纳
===在控制器===
1.将Main.storyboard对应的的控制器换成自定义的控制器 面板设置
2.设置组高:self.tableView.sectionHeaderHeight = 44;
3.根据组模型特点返回对应行数:return group.open? group.friends.count:0;
4.在viewForHeaderInSection方法里
1)创建自定义的header
2)设置代理
3)传递模型
4)返回这个header
5.实现代理方法
===在自定义的Header类===
.h中
1)定义代理协议
2)类声明,继承:UITableViewHearFooterView
3)定义组模型
4)定义代理
.m中
1)定义类延展:定义所需子控件属性
2)实现

+(instancetype)headerWithTableView:(UITableView *)tableView

3)封装cell重用的代码
4)单写

-(id)initWithReuseIndentifier:(NSString *)reuseIdentifier

5)在给按钮改背景,标题,标题颜色的时候 用set去设置
6)为了让header的子控件frame及时有效,重写-(void)layoutSubviews,在里面设置子控件的frame,当然先[super layoutSubviews];
7)重写setter方法,给组模型,子控件赋值
8)给按钮指定一个点击事件方法

[nameBtn addTarget:self action:@selector(nameClick) forControlEvents:UIControlEventTouchUpInside];
9)亮点:self.group.open = ! self.group.open;

10)判断代理有没有实现代理方法

if([self.delegate respondsToSelector:@selector(groupHeaderClick:)])

静态cell细节归纳
1.UI设计
1)在Main.storyboard删除自动生成的ViewController,拖入一个UITableViewController
2)调尺寸,去自适应
3)选中TableViewController重新关联到ViewController

4)把箭头 storyBoard entry point 调出来?

5)设置tableView的组个数

6)cell设置

QQ列表代码分析
1.头部View自定义实现 继承:UITableViewHeaderFooterView
==完全封装
1)封装cell的过程

+(instancetype)headViewWithTableView:(UITableView *)tableView

2)重写-(instacetype)initWithReuseIndentifier
1.实现父类 initWithReuseIndentifier
2.添加子控件:设置背景,设置内边距,添加事件
设置按钮内容水平对齐方式

nameView.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

设置按钮内容上左下右的内间距

nameView.contentEdgeInsets = UIEdgeInsetsMake(0,10,0,0);

设置按钮标题上左下右的间距

nameView.contentEdgeInsets = UIEdgeInsetsMake(0,10,0,0);

按钮添加点击事件

[nameView addTarget:self action:@selector(nameViewClick) forControlEvents:UIControlEventTouchUpInside];

按钮中小三角的旋转处理

nameView.imageView.contentMode = UIViewContentModeCenter;
nameView.imageView.clipsToBounds = NO;

3)重写-(void)layoutSubviews方法:
a:要实现父类的(不实现会导致控件上的点击事件失效)

b:在这里设置子控件的frame的原因:初始化时,当前headView的frame还没有值,这个方法可以监听当前控件什么时候有值
,只有headView的frame有值,给它的子控件的frame赋值才有意义

4)给数据模型赋值,子控件赋值放在这个setter方法里
给控件的transform赋值

self.nameView.image.transform = CGAffineTransformMakeRotation(M_PI_2);
复位
self.nameView.image.transform = CGAffineTransformIndentify;

5)点击事件
设置代理,在控制器里的headView创建方法里设置

1.cellView自定义实现
==完全封装:本质还是利用自带cell,只不过把创建封装了,并且封装了对应的数据模型
2.懒加载设计
放在主模型类里去做,这样在将主模型添加到数组之前,将次模型去字典转模型,同时将转好的模型数组存放在主模型下定义的一个次模型数组里
将次模型封装在主模型里,当解析数据文件时,一并将每个主模型的次模型数据,放入次模型数组里。
3.将取数据文件放在控制器里加载,和封装在模型里加载区别?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值