UIKit中的常用控件(三):UITableView

本篇博客主要介绍UITableView这个极度重要、使用最广泛的UI控件


一、设置数据源

  • 为tableView的dataSource设置数据源,通常将控制器设为数据源
  • 数据源需要遵守UITableViewDataSource协议
  • 实现以下数据源方法
  • numberOfSectionsInTableView: 返回组的个数(可选,默认为1)
  • tableView: numberOfRowsInSection: 返回每个组的行数
  • tableView: cellForRowAtIndexPath: 在这个方法中配置每一行的数据
  • tableView: titleForHeaderInSection:设置分组的头部标题
  • tableView: titleForFooterInSection:设置分组的尾部标题

二、UITableView的常见属性

  • rowHeight 行高。默认为44

  • sectionHeaderHeight/sectionFooterHeight 组头部/尾部的高度

  • separatorColor 分割线颜色

  • separatorStyle 分割线的样式

  • SingleLine 默认样式,单行

  • SingleLineEtched 与上面那个一样,但仅支持在grouped样式的tableView中显示

  • None 无分割线

  • tableHeaderView/tableFooterView 整个tableView的头部或尾部控件


三、UITableViewCell的常见属性

  • contentView 子控件,其包含了textLabel、imageView、detailTextLabel三个子控件
  • accessoryType 右侧按钮类型
  • accessoryView 右侧视图(优先级较高,设置后会覆盖掉右侧按钮)
  • selectionStyle 选中样式
  • backgroundColor 背景颜色
  • backgroundView 背景View
  • selectedBackgroundView 选中时的背景View


四、UITableViewCell的代理

  • 为tableView的delegate设置代理,通常将控制器设为代理
  • 代理对象需要遵守UITableViewDelegate协议
  • 实现以下代理方法
  • tableView: didSelectRowAtIndexPath: 监听用户选中了某一行
  • tableView: didDeselectRowAtIndexPath: 监听用户取消了某一行的选中


五、UITableView的性能优化

Apple的优化策略:
  1. 懒加载,只有需要显示的行,才创建对应的cell
  2. 循环利用。离开tableView的cell暂时放到缓存池中,需要显示的新的cell先尝试从缓存池中
实现方式:
  • tableView: cellForRowAtIndexPath:方法中,对tableView调用dequeueReusableCellWithIdentifier:方法,尝试在缓存池中取一个唯一标识符与参数一致的tableViewCell
  • 未取到可用的cell,则调用initWithStyle: reuseIdentifier:方法创建一个新的cell。需要在参数中传入一个唯一标识符,便于后续取出cell来重用
  • 也可以在viewDidLoad方法中调用registerClass:forCellReuseIdentifier:方法来注册一个重用cell标识。这样当缓存池没有可用的cell时,会自动创建cell
tips:
  • 类似于backgroundColor这样的一次性设置(每一行都一样且始终不变),可以放到if语句中,提高性能。


六、实现索引条

  • 实现sectionIndexTitlesForTableView:方法,创建一个表示索引条的数组并返回。
  • 通过sectionIndexColor属性可以设置索引条中的文字颜色
  • 用过sectionIndexBackgroundColor属性可以设置索引条的背景颜色



七、自定义Cell

自动计算行高的方法:

  • 设置rowHeight属性为UITableViewAutomaticDimension
  • 设置一个估算高度estimatedRowHeight


八、数据刷新

1.全局刷新

修改数据源中模型的数据,再对tableView调用reloadData方法即可

2.局部刷新

调用reloadRowsAtIndexPaths:withRowAnimation:方法,可以指定刷新指定索引位置的数据,并设定刷新时的动画形式

3.添加数据时的局部刷新

添加数据时,调用insertRowsAtIndexPaths:withRowAnimation:方法,即可在指定位置处播放cell增加的动画

4.删除数据时的局部刷新

删除数据时,调用deleteRowsAtIndexPaths:withRowAnimation:方法,即可在指定位置处播放cell增加的动画


九、左滑删除

  1. 设置代理
  2. 实现协议中的tableView: commitEditingStyle: forRowAtIndexPath:即可实现左滑删除,并在方法中删除掉模型中的数据、调用删除动画方法。
  3. 修改左滑删除按钮的文字
    实现协议中的tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:方法,返回一个字符串,即可修改删除按钮中的文本


十、左滑出现多个按钮

实现协议中的tableView:editActionsForRowAtIndexPath:方法,返回一个包含了所有按钮的数组即可

  • 通过UITableViewRowAction的类方法rowActionWithStyle:title:handler:方法创建即可创建一个按钮,并在handler这个block类型的参数中设置点击时触发的操作即可


十一、编辑模式

  • 修改tableView的editing属性为YES即可直接进入编辑模式
  • 调用setEditing:animated:方法也可进入编辑模式,参数传入YES则有动画

十二、编辑模式下多选

设置tableView的allowsMutipleSelectionDuringEditing属性为YES,即可在进入编辑模式时允许多选。
调用tableView的indexPathsForSelectedRows方法可以获取到用户在编辑模式下所选中的所有Cell的索引

你可能感兴趣的:(UIKit中的常用控件(三):UITableView)