iOS开发 - 第02篇 - UI进阶 - 05 - QQ好友列表

实现:QQ好友列表程序




源代码下载地址:点击打开链接


1、静态单元格


直接在Storyboard中拖,注意改成静态,只适用于界面长期不变的情况,实际中很少使用,基本都是代码实现,了解即可。




2、QQ好友列表实现要求




3、QQ好友列表实现思路


3.1 嵌套式模型


观察其plist文件可知,属于嵌套式模型,参考车牌列表程序 – 嵌套式模型。




3.2 基本界面搭建


1> 将ViewController继承自UITableViewController

2> 懒加载数据模型,并简单打印测试

3> 初步实现dataSource数据源方法,简单测试

4> 隐藏状态栏

5> 设置header的title和height

以上完成的效果和车牌列表程序一致


3.3 设置headerView --- 重要


1> 设置headerView的代理方法



注:也要使用可重用标识符


2> 注意:所有UIView当只是做了init操作的时候,然后马上取出其frame,此时这个frame的值都为0。




注:此时header的bounds值均为 0


3> 代码自定义headerView --- 重要

注:对比之前团购界面程序中,使用XIB自定义footerView

1. 类方法返回一个自定义headerView,注意需要可重用标识符

2. 重写- (id)initWithReuseIdentifier:(NSString*)reuseIdentifier




3. 由于init直接取出的frame为0,需重写- (void)layoutSubviews设置位置




4. 自定义headerView添加HMFriendsGroup模型属性,添加setter方法

5. headerView中的按钮添加监听方法

注:要添加监听方法,必须使用[self addSubView:],不能使用[self.contentViewaddSubView:]


3.4 点击headerView打开/合上相应列表 --- 重要

实现思路:显示0条Cell相当于合上!

1> 在HMFriendGroup中添加一个BOOL属性表征是否打开

2> 在自定义headerView中的按钮监听方法中改变上述打开属性

3> 在ViewController中的dataSource的返回每个section的row代理方法中根据是否打开返回相应row

4> 通知控制器刷新列表!!!


3.5 视图通知控制器做一些事情的三种方法:--- 重要


1> 自定义headerView添加一个代理属性,并让控制器成为其代理,在代理中方法中让tableView重新刷新数据reloadData

2> 代码块(步骤类似于代理)

1. 在View中定义一个block:typedef void(^HMHeaderViewBlock)(id);

2. @property (nonatomic, copy)HMHeaderViewBlock block;

3. 在控制器中实现block




4. 在View中的按钮点击事件中,通知block

if (self.block) {

       self.block(self);

    }

3> 通知中心

1. 在ViewController中添加观察者,监听通知

2. 在View中按钮点击后发布一个通知

3. 在ViewController中实现响应

4. 在ViewController中的dealloc方法中取消注册

[[NSNotificationCenter defaultCenter] removeObserver:self];


3.6 打卡/合上的时候图片转动


1> 注意:不能在按钮点击的时候去改变headerView中的ImageView的transform属性,因为之后会重新加载数据,即先清空列表(翻转的图片已经清掉),再去缓存池加载tableView中的Cell和headerView,因此不会有变化

2> 应该重写-(void)didMoveToSuperview



3> 此时翻转的话会导致箭头变形

修改如下:

//居中显示

btn.imageView.contentMode = UIViewContentModeCenter;

//不予许剪切超出部分

btn.imageView.clipsToBounds = NO;










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值