UITableVIew技术

表视图

2015-10-21  本文已影响74人  PeterKock

UITableView

有两种类型
1.平铺型(Plain)
2.分组型(Grouped)
常用属性:
id <UITableViewDataSource> dataSource:数据源代理
id <UITableViewDelegate> delegate:代理
separatorStyle:单元格线条显示样式
tableHeaderView:表视图的头部视图
tableFooterView:表视图尾部视图

常用方法:

表视图代理

UITableViewDataSource
数据源代理,为表视图提供基本的数据配置。
UITableViewDelegate
为表视图提供外观以及行为配置

单元格
UITableViewCell
用于显示每一个行上的数据(可以放label,button,image等)
常用属性:
imageView 显示图片;
textLabel 文本标签;
detailTextLabel 详细文本标签;
accessoryType 表格末端箭头样式;

//以下两个必须实现的代理

//1.设置表视图每个分区有多少行,(默认为一个分区)
-(NSInteger )tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

//2.设置单元格内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

//以下方法可选实现
//3.设置表格分区个数
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

//4.设置单元格高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
//点击单元格触发事件
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
关键方法:
//添加头部视图
    _MyTableView.tableHeaderView = titleLab;
//添加尾部视图
    _MyTableView.tableFooterView = footView;
#pragma mark -- 分区内容设置
//设置分区头的高度,不要设置0,设置0 会为默认值
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
//设置分区尾的高度,不要设置0,设置0 会为默认值
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
//设置分区头标题内容
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
//设置分区尾标题内容
-(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
//自定义头尾分区视图
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
//自定义尾部分区视图
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;

单元格重用机制

UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚出屏幕时,会将滚出屏幕的单元格放入重用的queue中,当某个未在屏幕上的单元格要显示的时候,就从这个queue中取出单元格进行重用
重用机制调用的就是dequeueReusableCellWithIdentifier这个方法,方法的意思就是“出列可重用的cell”

如何重用

1.设置单元格重用标识;
2.从重用队列根据标识取出可以重用的单元格
3.判断可以重用的单元是否存在,如果不存在,则创建一个单元格,并且添加重用标识

添加单元格

-(void)insertRowsAtIndexPaths:(NSArray *)indexPaths
withRowAnimation:(UITableViewRowAnimation)animation;  //根据下标插入  一个单元格

删除单元格

-(void)deleteRowsAtIndexPaths:(NSArray *)indexPaths
withRowAnimation:(UITableViewRowAnimation)animation; :根据下标删除    一个单元格

直接在控制器上自定义cell
1、创建表格,并设置代理,实现代理必须实现方法;
2、单元格定制方法中
2-1:创建一个静态标识
2-2:从重用队列中获取单元格
2-3:判断是否有重用单元格,如果没有则创建单元格,并且在单元格上添加自定义控件;
2-4:通过tag 标识取出单元格上控件,并进行赋值

此种方式:要注意的是,定制的内容,要写在判断重用的括号中,并且给自定义的每个控件设置不同的标识tag,然后再括号外,通过tag 值获取控件,并进行赋值;
用这种方式的缺点是:控制上代码量多,容易造成代码冗余,接而引出自定类的方式。

封装cell类自定义cell

1、创建表格,并设置代理,实现代理必须实现方法;
2、创建一个自定义cell类,继承于UITableViewCell;
3、在自定义类中重写-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 方法,并在方法中定制自定义控件,添加到单元格上;
4、在控制器中,导入自定义cell类。
5、在单元格定制方法中,生成自定义cell,并进行赋值

Xib方式自定义cell

1、创建一个空的Nib文件,命名为Custom.xib
2、从objectLibrary 中拖一个TableViewCell
3、在cell 上拖UIImageView、UILable 并设置tag 值
4、在定制单元格方法中,获取cell ,并使用

单选实现步奏

  1. 在AppDelegate.m中包含ViewController.h头文件,创建ViewController对象(vc),接着创建一个UINavigationController对象(nVC)将vc设置为自己的根视图,最后设置self.window.rootViewController为nVC。
  2. 在ViewController.m中创建一个全局的可变数组,并往里面添加表格需要的数据字典对象。
  3. 创建一个类名叫QQListView继承UIView,在QQListView.h中声明初始化方法,在QQListView.m中实现重写的初始化方法。
  4. 创建一个类名叫ListTableViewCell继承UITableViewCell,在ListTableViewCell.h中声明单元格的各个控件变量,在ListTableViewCell.m中实现重写的初始化方法。
  5. 在QQListView.m中实现表格的代理方法,并包含ListTableViewCell.h,用ListTableViewCell类创建cell对象。
  6. 在ViewController.m中包含QQListView.h头文件,并创建QQListView的对象,添加到self.view上。
  7. 在ListTableViewCell.h中声明设置单元格数据的方法,在ListTableViewCell.m中实现数据显示方法。
  8. 在ListTableViewCell.m中实现点击单元格触发的代理方法完成单选功能。

多选实现原理

1、为要显示的数据创建模型类,并在该类中添加一个布尔型的标志位
2、uitableView 的 cellForRowAtIndexPath: 方法中,判断当前要显示的数据的标志位是否是YES ,若是,将当期的单元格的 accessoryType 属性改为 UITableViewCellAccessoryCheckmark 若不是 将其改为UITableViewCellAccessoryNone
3、若选中某行时,更改相应的数据的标志位的值,并刷新此行;

多选实现步奏

  1. 在AppDelegate.m中包含ViewController.h头文件,创建ViewController对象(vc),接着创建一个UINavigationController对象(nVC)将vc设置为自己的根视图,最后设置self.window.rootViewController为nVC。
  2. 在ViewController.m中创建一个全局的可变数组,并往里面添加表格需要的数据字典对象。
  3. 创建一个类名叫GoodsListView继承UIView,在GoodsListView.h中声明初始化方法,在GoodsListView.m中实现重写的初始化方法。
  4. 创建一个类名为DrawLableLine,继承UILable。
  5. 创建一个类名叫ListTableViewCell继承UITableViewCell,在ListTableViewCell.h中包含DrawLableLine.h,并声明单元格的各个控件变量,其中原价格的lable是DrawLableLine类型,在ListTableViewCell.m中实现重写的初始化方法。
    . 在GoodsListView.m中实现表格的代理方法,并包含ListTableViewCell.h,用ListTableViewCell类创建cell对象。
  6. 在ViewController.m中包含GoodsListView.h头文件,并创建GoodsListView的对象,添加到self.view上。
  7. 在ListTableViewCell.h中声明设置单元格数据的方法,在ListTableViewCell.m中实现数据显示方法及价格划线方法。
  8. 在ListTableViewCell.m中实现点击按钮完成复选及修改商品数量的功能。

一.单选原理

1、为要显示的数据创建模型类,并在该类中添加一个布尔型的标志位
2、uitableView 的 cellForRowAtIndexPath: 方法中,判断当前要显示的数据的标志位是否是YES ,若是,将当期的单元格的 accessoryType 属性改为 UITableViewCellAccessoryCheckmark 若不是 将其改为UITableViewCellAccessoryNone
3、若选中某行时,更改相应的数据的标志位的值,并且刷新有关的两行;

二:多选实现原理

1、为要显示的数据创建模型类,并在该类中添加一个布尔型的标志位
2、uitableView 的 cellForRowAtIndexPath: 方法中,判断当前要显示的数据的标志位是否是YES ,若是,将当期的单元格的 accessoryType 属性改为 UITableViewCellAccessoryCheckmark 若不是 将其改为UITableViewCellAccessoryNone
3、若选中某行时,更改相应的数据的标志位的值,并刷新此行;

上一篇下一篇

猜你喜欢

热点阅读