UITableView

简介

表格列表视图




API

- initWithFrame:style:

说明:初始化并返回一个拥有指定框架和风格的表格视图对象

注意:

  • 当你创建表格视图时,必须指定一个风格。在表格视图创建后,风格是无法修改的。

  • 如果你使用继承自UIViewinitWithFrame:方法来初始化表格视图,则其默认风格为UITableViewStylePlain


style

说明:只读,返回表格视图的风格。


- numberOfRowsInSection:

说明:返回指定的section中单元格的数量

注意:

  • UITableView通过其数据源对象的该方法获得单元格的数量,并将其缓存起来。


numberOfSections

说明:只读,返回表格视图的section数量。

注意:

  • UITableView通过其数据源对象的该方法获得section的数量,并将其缓存起来。


rowHeight

说明:可读写,表示每个单元格的高度,默认值为UITableViewAutomaticDimension

注意:

  • 高度的单位是点

  • 如果你在Interface Builder中创建了一个自我调整大小的单元格,则该单元格的默认高度会调整为在Interface Builder中设置的值。

  • 为了取得Interface Builder中创建的自我调整大小的单元格,你必须显示地将rowHeight属性值设置为UITableViewAutomaticDimension

  • 每当一个表格视图显示时,都会为每个单元格调用表格视图的代理方法tableView:heightForRowAtIndexPath:,当单元格数量大于等于1000个时,会导致显著的性能问题。


separatorStyle

说明:表格单元格分隔线的风格


separatorColor

说明:表格单元格分割线的颜色,默认为灰色(gray)。


separatorEffect

说明:应用于表格分割线的效果

注意:从iOS 8.0开始可用


backgroundView

说明:表格视图的背景视图

注意:

  • 表格视图的背景视图会自动调整尺寸,以匹配表格视图的尺寸。

  • 背景视图作为表格视图的一个子视图,位于所有单元格、页眉及页脚视图的后面。

  • 设置表格视图的背景颜色时,必须将该属性值设置为nil。


separatorInset

说明:指定单元格分割线的默认内边距

注意:

  • 从iOS 7开始,单元格分割线不会延伸到表格视图的边缘。

  • 只有左右内边距的设置是有效的

例子:

  1. tableView.separatorInset = UIEdgeInsetsMake(0, 3, 0, 11);


cellLayoutMarginsFollowReadableWidth

说明:布尔值,表示单元格的外边距是否来自于可读内容向导的宽度。

注意:从iOS 9.0开始可用


- registerNib:forCellReuseIdentifier:

说明:使用指定的重用标识符注册一个包含一个单元格的nib对象

注意:

  • identifier参数不能是nil或空字符串

  • 在使用指定标识符注册时,如果已经存在指定标识符的class或nib对象,且nib参数值不为nil,则会使用新的对象替代旧的。

  • 你可以通过将nib参数值设置为nil,来注销指定标识符的nib对象。


- registerClass:forCellReuseIdentifier:

说明:注册一个用于创建新表格单元格的类

注意:

  • identifier参数不能是nil或空字符串

  • 在使用指定标识符注册时,如果已经存在指定标识符的class或nib对象,则会使用新的类替代旧的。

  • 你可以通过将cellClass参数值设置为nil,来注销指定标识符的class。


- dequeueReusableCellWithIdentifier:forIndexPath:

说明:返回一个使用指定标识符的可重用表格单元格视图,并将其添加到表格中。

注意:

  • identifier参数不能是nil或空字符串

  • 一个表格视图维护着一个被数据源标记为重用的UITableViewCell对象队列


- dequeueReusableCellWithIdentifier:

说明:通过标识符来返回一个可重用的表格单元格视图

注意:

  • identifier参数不能是nil


- registerNib:forHeaderFooterViewReuseIdentifier:

说明:使用指定的重用标识符注册一个包含一个表格视图页眉或页脚的nib对象

注意:

  • identifier参数不能是nil或空字符串

  • 在使用指定标识符注册时,如果已经存在指定标识符的class或nib对象,且nib参数值不为nil,则会使用新的对象替代旧的。

  • 你可以通过将nib参数值设置为nil,来注销指定标识符的nib对象。


- registerClass:forHeaderFooterViewReuseIdentifier:

说明:注册一个用于创建表格视图页眉或页脚的类

注意:

  • identifier参数不能是nil或空字符串

  • 在使用指定标识符注册时,如果已经存在指定标识符的class或nib对象,则会使用新的类替代旧的。

  • 你可以通过将aClass参数值设置为nil,来注销指定标识符的类。


- dequeueReusableHeaderFooterViewWithIdentifier:

说明:通过指定的标识符返回一个可重用的页眉或页脚视图

注意:

  • identifier参数不能是nil

  • 一个表格视图维护着一个被表格视图的代理标记为重用的UITableViewHeaderFooterView对象队列


tableHeaderView

说明:表格页眉视图,默认值为nil。

注意:

  • 表格页眉视图与章节页眉(即section header)是不同的


tableFooterView

说明:表格页脚视图,默认值为nil。

注意:

  • 表格页脚视图与章节页脚(即section footer)是不同的


sectionHeaderHeight

说明:表格视图中章节的页眉高度,非负值。

注意:

  • 这个属性值仅用于表格视图的代理对象没有实现tableView:heightForHeaderInSection:方法的情况


sectionFooterHeight

说明:表格视图中章节的页脚高度,非负值。

注意:

  • 这个属性值仅用于表格视图的代理对象没有实现tableView:heightForFooterInSection:方法的情况


- headerViewForSection:

说明:返回指定章节的页眉视图


- footerViewForSection:

说明:返回指定章节的页脚视图


- cellForRowAtIndexPath:

说明:返回指定索引路径中的表格单元格

注意:

  • 如果单元格不可见,或indexPath越界,则返回nil。


- indexPathForCell:

说明:返回给定的表格单元格所在的索引路径

注意:

  • 如果indexPath是无效的,则返回nil。


- indexPathForRowAtPoint:

说明:返回一个给定点所在的行对应的索引路径

注意:

  • 如果点超出了任意行的边界,则返回nil。


- indexPathsForRowsInRect:

说明:返回一个给定的矩形所覆盖的行对应的索引路径

注意:

  • 如果矩形没有覆盖任何行,则返回一个空数组。


visibleCells

说明:只读,返回表格视图中的可见单元格。


indexPathsForVisibleRows

说明:只读,返回表格视图可见行的索引路径。

注意:

  • 如果没有可见行,则返回nil。


estimatedRowHeight

说明:表格视图的预估行高,默认值为0。

注意:

  • 如果表格包含了可变高度的行,则在加载表格时,可能需要计算所有行的高度(这会影响表格的加载性能),而使用预估高度可以将一些几何计算的成本,从表格加载时间推迟到滚动时间,从而提高性能。

  • 当你创建一个自我调整大小的表格单元格时,你需要设置该属性并通过约束来定义单元格的尺寸。


estimatedSectionHeaderHeight

说明:表格视图章节页眉的预估高度,默认值为0。

注意:

  • 如果表格包含了可变高度的章节页眉,则在加载表格时,可能需要计算所有章节的页眉高度(这会影响表格的加载性能),而使用预估高度可以将一些几何计算的成本,从表格加载时间推迟到滚动时间,从而提高性能。


estimatedSectionFooterHeight

说明:表格视图章节页脚的预估高度,默认值为0。

注意:

  • 如果表格包含了可变高度的章节页脚,则在加载表格时,可能需要计算所有章节的页脚高度(这会影响表格的加载性能),而使用预估高度可以将一些几何计算的成本,从表格加载时间推迟到滚动时间,从而提高性能。


- scrollToRowAtIndexPath:atScrollPosition:animated:

说明:滚动表格视图,直到索引路径标识的行位于屏幕上的指定位置。

注意:

  • 调用此方法不会导致代理对象接收到scrollViewDidScroll:消息


- scrollToNearestSelectedRowAtScrollPosition:animated:

说明:滚动表格视图,以便于被选中的行靠近指定的位置。


indexPathForSelectedRow

说明:只读,返回选中行对应的索引路径。

注意:

  • 如果索引路径是无效的,则返回nil。

  • 如果选中了多个行,则返回选中行数组中第一个对象对应的索引路径。


indexPathsForSelectedRows

说明:只读,返回被选中的多个行对应的索引路径。

注意:

  • 如果没有行被选中,则返回nil。


- selectRowAtIndexPath:animated:scrollPosition:

说明:通过指定的索引路径来选择一个表格行,并可选地将其滚动到表格视图中的指定位置。

注意:

  • 调用该方法不会导致代理收到tableView:willSelectRowAtIndexPath:tableView:didSelectRowAtIndexPath:消息,也不会导致UITableViewSelectionDidChangeNotification通知被发送。

  • scrollPosition的参数值设置为UITableViewScrollPositionNone,将不会产生滚动。

例子:

  1. // 滚动到最新选中的行
  2. NSIndexPath *rowToSelect;
  3. UITableView *myTableView;
  4. [myTableView selectRowAtIndexPath:rowToSelect animated:YES scrollPosition:UITableViewScrollPositionNone];
  5. [myTableView scrollToRowAtIndexPath:rowToSelect atScrollPosition:UITableViewScrollPositionNone animated:YES];


- deselectRowAtIndexPath:animated:

说明:通过指定的索引路径来取消选中一个表格行,并且可以设置这个取消选中是否带有动画效果。

注意:

  • 调用该方法不会导致代理收到tableView:willDeselectRowAtIndexPath:tableView:didDeselectRowAtIndexPath:消息,也不会导致UITableViewSelectionDidChangeNotification通知被发送。

  • 调用此方法不会导致滚动到被取消选中的行


allowsSelection

说明:布尔值,表示是否允许用户选中表格行,YES表示允许。

注意:

  • 该属性仅为影响非编辑模式下的表格行选中,编辑模式下需要通过allowsSelectionDuringEditing属性来设置。


allowsMultipleSelection

说明:布尔值,表示是否允许用户在非编辑模式下选中多个表格行,YES表示允许,默认值为NO。


allowsSelectionDuringEditing

说明:布尔值,表示是否允许用户在编辑模式下选中表格行,YES表示允许,默认值为NO。


allowsMultipleSelectionDuringEditing

说明:布尔值,表示是否允许用户在编辑模式下选中多个表格行,YES表示允许,默认值为NO。


- beginUpdates

说明:开始一系列的方法调用,像插入、删除、选中表格行和章节。

注意:

  • 如果你想在表格视图中并发执行插入、删除、选中表格行和章节的操作,同时使用动画效果,那就调用该方法。

  • 调用该方法之后,必须调用endUpdates

  • beginUpdatesendUpdates方法组可以嵌套使用

  • 可以使用beginUpdatesendUpdates方法组,在不重载单元格的情况下,动画的改变单元格的高度。

  • 如果你不将插入、删除、选中表格行和章节的操作放在beginUpdatesendUpdates方法组内,表格属性(如行数)可能会失效。

  • 你不应该在beginUpdatesendUpdates方法组内调用reloadData方法


- endUpdates

说明:结束一系列的方法调用,像插入、删除、选中,或重载表格行和章节。

注意:

  • 当你调用该方法时,表格视图会同时动画的执行插入、删除、选中,或重载表格行和章节的操作。


- insertRowsAtIndexPaths:withRowAnimation:

说明:将表格行插入到索引路径标识的指定位置,并可以指定是否以动画方式插入。

注意:

  • 当在beginUpdatesendUpdates方法组内调用该方法时,表格视图会延迟任何行或章节的插入操作,直到它处理完行或章节的删除操作。


- deleteRowsAtIndexPaths:withRowAnimation:

说明:删除被指定索引路径标识的表格行,并可以指定是否以动画方式删除。

注意:

  • 当在beginUpdatesendUpdates方法组内调用该方法时,表格视图会延迟任何行或章节的插入操作,直到它处理完行或章节的删除操作。


- moveRowAtIndexPath:toIndexPath:

说明:将表格行从指定位置移动到目标位置

注意:

  • 该方法每次只能移动一个表格行,如果你想移动多行,可以在beginUpdatesendUpdates方法组内反复地调用该方法。


- insertSections:withRowAnimation:

说明:向表格视图中插入一个或多个章节,并可以指定是否以动画方式插入。

注意:

  • 当在beginUpdatesendUpdates方法组内调用该方法时,表格视图会延迟任何行或章节的插入操作,直到它处理完行或章节的删除操作。


- deleteSections:withRowAnimation:

说明:从表格视图中删除一个或多个章节,并可以指定是否以动画方式删除。

注意:

  • 当在beginUpdatesendUpdates方法组内调用该方法时,表格视图会延迟任何行或章节的插入操作,直到它处理完行或章节的删除操作。


- moveSection:toSection:

说明:在表格视图中,将一个章节移动到新位置。

注意:

  • 该方法每次只能移动一个表格章节,如果你想移动多个章节,可以在beginUpdatesendUpdates方法组内反复地调用该方法。


editing

说明:布尔值,用于表明表格视图是否处于编辑模式,默认值为NO。

注意:

  • 当表格处于编辑模式时,每个单元格的左边可能会显示一个插入或删除控件,右边可能会显示一个排序控件,这些都取决于如何配置单元格。

  • 轻击一个控件会导致表格视图调用数据源的tableView:commitEditingStyle:forRowAtIndexPath:方法


- setEditing:animated:

说明:切换表格视图的编辑模式状态


- reloadData

说明:重载表格视图的行和章节

注意:

  • 为了提高效率,表格视图只会重新显示可见的行。

  • 你不应该在beginUpdatesendUpdates方法组内调用reloadData方法


- reloadRowsAtIndexPaths:withRowAnimation:

说明:使用指定的动画效果重载指定的表格行

注意:

  • 当在beginUpdatesendUpdates方法组内调用该方法时,它的行为类似于deleteRowsAtIndexPaths:withRowAnimation:


- reloadSections:withRowAnimation:

说明:使用指定的动画效果重载指定的表格章节

注意:

  • 当在beginUpdatesendUpdates方法组内调用该方法时,它的行为类似于deleteSections:withRowAnimation:


- reloadSectionIndexTitles

说明:重载表格视图右侧的索引栏项目

注意:

  • 该方法提供了一种插入或删除表格章节后,在不重载整个表格的情况下,更新章节索引的方法。


- rectForSection:

说明:返回表格视图指定章节的绘制区域


- rectForRowAtIndexPath:

说明:返回被指定索引路径标识的表格行的绘制区域,如果索引路径是无效的,则返回CGRectZero。


- rectForFooterInSection:

说明:返回指定章节页脚的绘制区域


- rectForHeaderInSection:

说明:返回指定章节页眉的绘制区域


dataSource

说明:表格视图的数据源对象

注意:

  • 数据源对象必须遵循UITableViewDataSource协议

  • 它是非持有的(不会增加数据源对象的引用计数)


delegate

说明:表格视图的代理对象

注意:

  • 代理对象必须遵循UITableViewDelegate协议

  • 它是非持有的(不会增加代理对象的引用计数)


sectionIndexMinimumDisplayRowCount

说明:表示在表格视图的第几行显示右边的索引列表,默认值为0。

注意:

  • 此属性仅适用于风格为UITableViewStylePlain的表格视图


sectionIndexColor

说明:表格视图索引文本的颜色

注意:

  • 当属性值为nil时,表示使用默认颜色。


sectionIndexBackgroundColor

说明:表格视图的章节索引在没有被触摸时的背景颜色

注意:

  • 当属性值为nil时,表示使用默认颜色。


sectionIndexTrackingBackgroundColor

说明:表格视图的章节索引被触摸时的背景颜色

注意:

  • 当属性值为nil时,表示使用默认颜色。


UITableViewSelectionDidChangeNotification

说明:当被选中的行发生改变时,发送该通知。

注意:

  • 该通知没有对应的userInfo字典数据




参考资源




经验

  • 如何去掉表格单元格分割线左边的空白?
  1. tableView.separatorInset = UIEdgeInsetsZero;
  • 如何去掉表格单元格底部的分割线?
  1. tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  • 如何设置表格分组之间的间隔?
  1. // 将表格的风格设置为UITableViewStyleGrouped,然后实现下面的协议方法
  2. - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
  3. return 0.01; // 由于设置0无效,这里设置一个接近于0的数,从视觉上让header不可见
  4. }
  5. - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
  6. return 10; // 你期望的间隔距离
  7. }