您的位置:首页 > 产品设计 > UI/UE

UITableView总结

2016-02-15 16:16 597 查看
m
http://my.oschina.net/iq19900204/blog/292125
1.协议介绍
UITableViewDataSource(11)
UITableViewDelegate(常用)
2.刷新
下拉刷新:
上拉刷新
3.搜索
4.重用
自定义cell
不使用重用方法
注册Cell
5.编辑
滑动更多
6.优化

UITableView 总结

UITableView是UIScrollView的子类,因此它可以自动响应滚动事件(一般为上下滚动)。

它内部包含0到多个UITableViewCell对象,每个table
cell展示各自的内容。当新cell需要被显示时,就会调用tableView:cellForRowAtIndexPath:方法来获取或创建一个cell;而不可视时,它又会被释放。由此可见,同一时间其实只需要存在一屏幕的cell对象即可,不需要为每一行创建一个cell。

1.协议介绍

UITableViewDataSource(11)

?

UITableViewDelegate(常用)

?
UITableViewDelegate中的协议还有很多,我只列出了比较常用的,想知道更多的可以查看官方头文件或官方文档

分割线:separator复制粘贴:Copy/Paste 拖拽:move索引:index编辑:editing

2.刷新

下拉刷新:

第三方:EGORefreshTableHeaderView

官方提供(ios6以上系统):UIRefreshControl

UIRefreshControl使用方法非常简单:

UIRefreshControl * _refresh;

?
另外UITableViewController中已经自带了UIRefreshControl
为成员变量,只需要增加猝发时间就可以了

上拉刷新

1.第三方:EGORefreshTableFooterView

2.自加按钮:

?
3.视图滚到最后直接加载更多:

?

3.搜索

在xib中拖入search
Bar and Search Display控件,实现UISearchBarDelegate协议

?
不用xib的话,可以直接添加代码

?
demo: https://github.com/Jonear/iosDemo/tree/master/TableViewFresh

4.重用

UItableView对Cell有一套重用机制,他会将滚出屏幕外的cell放到一个队列中,滚入屏幕的会从这个队列中获取cell,如果没有再去创建。

- (UITableViewCell *)tableView:(UITableView
*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

staticNSString
*cellIdentifier =@" cellIdentifier";

UITableViewCell * cell = [tableViewdequeueReusableCellWithIdentifier:windowReuseIdentifier];

if (!cell) {

cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:windowReuseIdentifier];

}

return cell;

}

自定义cell

新建cell文件,继承UITableViewCell
如果你没使用xib或者storyboard的话可以在直接new一个cell,跟普通写法一样
1. 新建cell文件,继承UITableViewCell
2. 如果你没使用xib或者storyboard的话可以在直接new一个cell,跟普通写法一样

?
3. 如果有xib

?
4.还有个未必好的办法(这个办法也用于在xib多个view中获取到想要的一个)

?

不使用重用方法

方法1 将获得cell的方法从- (UITableViewCell*)dequeueReusableCellWithIdentifier:(NSString*)identifier换为-(UITableViewCell
*)cellForRowAtIndexPath:(NSIndexPath *)indexPath

重用机制调用的就是dequeueReusableCellWithIdentifier这个方法,方法的意思就是“出列可重用的cell”,因而只要将它换为cellForRowAtIndexPath(只从要更新的cell的那一行取出cell),就可以不使用重用机制,因而问题就可以得到解决,虽然可能会浪费一些空间。

第一个方法如果使用下面插入多次可能会有问题:

?
方法2 通过为每个cell指定不同的重用标识符(reuseIdentifier)来解决。

重用机制是根据相同的标识符来重用cell的,标识符不同的cell不能彼此重用。于是我们将每个cell的标识符都设置为不同(@"CMainCell%d",
indexPath.row)

方法3 删除重用cell的所有子视图

这个方法是通过删除重用的cell的所有子视图,从而得到一个没有特殊格式的cell。

方法4:为不重用的单元格单独生成单独的cell,而不是重用队列中的单元格。

注册Cell

?
简单讲就是注册完cell后,使用

?
一定会有返回cell,系统在默认没有cell可复用的时候自动new一个cell出来。

5.编辑

?

滑动更多

继承UITableViewCell,重新初始化方法

?
demo:http://code4app.com/ios/SWTableViewCell/5269d9376803fa5367000001

6.优化

1.最好改造原生的tableViewCell,尽量不要用xib自定制cell,可以尽量在drawRect中绘制

2.尽量使用重用机制,不要创建太多cell

3.尽量不要使用透明视图,和layer改造

4.重载共同部分可以放在生成Cell部分

5.尽量不要老调用reloaddata,可能的情况下可以考虑使用

?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: