基本介绍
UITableView在 iOS 开发中可以说是使用最广泛的控件,它有两种风格:UITableViewStylePlain和UITableViewStyleGrouped。这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照普通样式显示而已。
在UITableView中数据只有行的概念,并没有列的概念,每行数据都是一个UITableViewCell,其内部有一个UIView控件(contentView,作为其他元素的父控件)、两个UILable控件(textLabel、detailTextLabel)、一个UIImage控件(imageView),分别用于容器、显示内容、详情和图片。
UITableViewCell提供有四种样式,分别为
UITableViewCellStyleDefault
左侧显示textLabel(不显示detailTextLabel),imageView可选(显示在最左边)
UITableViewCellStyleValue1
左侧显示textLabel、右侧显示detailTextLabel(默认蓝色),imageView可选(显示在最左边)
UITableViewCellStyleValue2
左侧依次显示textLabel(默认蓝色)和detailTextLabel,imageView可选(显示在最左边)
UITableViewCellStyleSubtitle
左上方显示textLabel,左下方显示detailTextLabel(默认灰色),imageView可选(显示在最左边)
UITableView需要实现UITableViewDataSource和UITableViewDelegate 协议,来实现和外界数据和操作的交互。
数据源
UITableViewDataSource共有三类方法:
(1)配置表视图
这类方法用来计算 section 和 cell 的数量、section 索引等,以及设置表视图中的 cell视图、header/footer 的标题。
根据数据源方法生成单元格的顺序是:计算分组数——计算每组行数——生成分组索引——生成单元格
生成单元格的方法并不是一次全部调用,而是只会生产当前显示在界面上的单元格,当用户滚动操作时再显示其他单元格
(2)插入或修改行
设置是否可以编辑指定的行,以及设置相应行的编辑样式。
(3)重新排序
设置能否移动指定的行,以及确定将要移动到的位置。
代理
UITableViewDelegate共有九类方法:
(1)设置表视图的行
包括设置行高、预计的行高、行缩进,以及在即将显示行前要进行的绘制工作。
(2)管理Accessory Views
包括设置editActions(表格行侧滑可以执行的操作)、accessoryButton点击事件的处理。
(3)管理表格行的选择
包括willSelect(将要选中)、didSelect(已经选中)、willDeselect(将要放弃选中)、didDeslect(放弃选中)四种状态,可以设置在选择的不同状态,进行不同的操作。
(4)修改 section 的 header 和 footer
包括设置 header 和 footer 的高度、预计高度、视图,以及将要显示时执行的操作。
(5)编辑表视图的行
包括willBeginEditing(将要开始编辑)和 didEndEditing(结束编辑)两种状态,以及设置行的编辑样式、删除确认按钮的标题、在编辑时是否缩进。
(6)排序
这个方法和数据源方法中的那个的不同之处在于:它返回的是目标位置的 indexPath
(7)追踪视图的移除
包括设置结束 cell、header 和 footer 显示后执行的操作三种。
(8)行内容的复制粘贴
包括是否显示编辑菜单(默认不显示)、是否执行动作和实行哪种操作三种。
(9)行的高亮显示
包括shouldHighlight、didHighlight和didUnhighlight三种。
(10)focus
包括能否突出显示某行、应该更新突出显示、已更新显示某行、突出显示的行的 indexPath 四种。
性能优化
在UITableView内部有一个缓存池,初始化时使用initWithStyle:(UITableViewCellStyle) reuseIdentifier:(NSString *)方法指定一个可重用标识,就可以将这个cell放到缓存池。然后在使用时使用指定的标识去缓存池中取得对应的cell然后修改cell内容即可。
UITableViewCell
UITableViewCell是构建一个UITableView的基础,在UITableViewCell内部有一个UIView控件作为其他内容的容器,它上面有一个UIImageView和两个UILabel,通过UITableViewCellStyle属性可以对其样式进行控制。其结构如下:
有时候我们会发现很多UITableViewCell右侧可以显示不同的图标,在iOS中称之为访问器,点击可以触发不同的事件,例如设置功能: