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。
UITableViewDelegate中的协议还有很多,我只列出了比较常用的,想知道更多的可以查看官方头文件或官方文档
分割线:separator复制粘贴:Copy/Paste 拖拽:move索引:index编辑:editing
官方提供(ios6以上系统):UIRefreshControl
UIRefreshControl使用方法非常简单:
UIRefreshControl * _refresh;
?
另外UITableViewController中已经自带了UIRefreshControl
为成员变量,只需要增加猝发时间就可以了
2.自加按钮:
?
3.视图滚到最后直接加载更多:
?
Bar and Search Display控件,实现UISearchBarDelegate协议
?
不用xib的话,可以直接添加代码
?
demo: https://github.com/Jonear/iosDemo/tree/master/TableViewFresh
- (UITableViewCell *)tableView:(UITableView
*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
staticNSString
*cellIdentifier =@" cellIdentifier";
UITableViewCell * cell = [tableViewdequeueReusableCellWithIdentifier:windowReuseIdentifier];
if (!cell) {
cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:windowReuseIdentifier];
}
return cell;
}
如果你没使用xib或者storyboard的话可以在直接new一个cell,跟普通写法一样
1. 新建cell文件,继承UITableViewCell
2. 如果你没使用xib或者storyboard的话可以在直接new一个cell,跟普通写法一样
?
3. 如果有xib
?
4.还有个未必好的办法(这个办法也用于在xib多个view中获取到想要的一个)
?
*)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可复用的时候自动new一个cell出来。
?
demo:http://code4app.com/ios/SWTableViewCell/5269d9376803fa5367000001
2.尽量使用重用机制,不要创建太多cell
3.尽量不要使用透明视图,和layer改造
4.重载共同部分可以放在生成Cell部分
5.尽量不要老调用reloaddata,可能的情况下可以考虑使用
?
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(常用)
?分割线:separator复制粘贴:Copy/Paste 拖拽:move索引:index编辑:editing
2.刷新
下拉刷新:
第三方:EGORefreshTableHeaderView官方提供(ios6以上系统):UIRefreshControl
UIRefreshControl使用方法非常简单:
UIRefreshControl * _refresh;
?
为成员变量,只需要增加猝发时间就可以了
上拉刷新
1.第三方:EGORefreshTableFooterView2.自加按钮:
?
?
3.搜索
在xib中拖入searchBar and Search Display控件,实现UISearchBarDelegate协议
?
?
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,跟普通写法一样
?
?
?
不使用重用方法
方法1 将获得cell的方法从- (UITableViewCell*)dequeueReusableCellWithIdentifier:(NSString*)identifier换为-(UITableViewCell*)cellForRowAtIndexPath:(NSIndexPath *)indexPath
重用机制调用的就是dequeueReusableCellWithIdentifier这个方法,方法的意思就是“出列可重用的cell”,因而只要将它换为cellForRowAtIndexPath(只从要更新的cell的那一行取出cell),就可以不使用重用机制,因而问题就可以得到解决,虽然可能会浪费一些空间。
第一个方法如果使用下面插入多次可能会有问题:
?
重用机制是根据相同的标识符来重用cell的,标识符不同的cell不能彼此重用。于是我们将每个cell的标识符都设置为不同(@"CMainCell%d",
indexPath.row)
方法3 删除重用cell的所有子视图
这个方法是通过删除重用的cell的所有子视图,从而得到一个没有特殊格式的cell。
方法4:为不重用的单元格单独生成单独的cell,而不是重用队列中的单元格。
注册Cell
??
5.编辑
?滑动更多
继承UITableViewCell,重新初始化方法?
6.优化
1.最好改造原生的tableViewCell,尽量不要用xib自定制cell,可以尽量在drawRect中绘制2.尽量使用重用机制,不要创建太多cell
3.尽量不要使用透明视图,和layer改造
4.重载共同部分可以放在生成Cell部分
5.尽量不要老调用reloaddata,可能的情况下可以考虑使用
?
相关文章推荐
- 基础UI控件 Cannas Drawable 复杂的TextView
- PHP包含文件函数include、include_once、require、require_once区别总结
- 1062. Talent and Virtue (25)
- iOS之UI学习-UIButton
- UITextView,Label加载html代码
- iOS9 系统分享调用(UIActivityViewController)
- UIScrollView基本用法和代理方法
- 简单描述UIView 和 CALayer的区别
- 使用easyUI框架实现列表的整体排序
- 配置配置DruidDataSource
- UVa--1594 Ducci Sequence(模拟)
- UIImagePickerController详解
- UITableView的编辑功能,UICollectionView
- Error querying database. Cause: java.sql.SQLException: The user specified as a definer (''@'') doe
- 使用UIView+Extension请注意:令人捉急的centerX导致子控件显示位置不对的矫正
- 用GUID做主键与int做主键的区别(转)
- 安装hue依赖包
- Viewpage的.setCurrentItem 导致UI线程的执行阻塞问题 广告轮播 数据加载后填充viewpagerAdapter
- 修改 Ueditor 默认显示的字体大小
- Query Validate