UITableView支持的属性
UITableView继承了UIScrollView,它具有UIScrollView的功能,这个UIScrollView中主要封装了UITableViewCell单元格控件,因此,UITableView默认可以对单元格进行滚动。默认状态下,所有的UITableViewController实例被自动设为UIScrollView委托。
我们即可在IB中将UITableView拖入界面设计文件中添加该控件,也可通过代码创建,两种方式本质相同。支持属性大致如下:
(1) Style:该属性指定该表格的风格,它对应UITableView对象的style属性,该属性支持如下两个属性值:
1) Plain:指定该表格使用最普通的风格。
2) Grouped:指定该表格使用分组风格。
(2) Separator :该属性指定表格行之间分隔条的样式,可配置两个属性:
1) 分隔条样式。
2) 分隔条颜色
(3) Selector:该属性用于控制该表格的选择风格。
(4) Editing :该属性用于控制当表格处于编辑状态是否允许选择。
简单表格
掌握上面理论后,简单表格开发步骤如下:
(1) 在界面布局中添加一个UITableView控件;或通过代码创建一个UITableView对象,并将该对象添加到应用界面中。
(2) 为UITableView设置dataSource属性,该属性值必须是一个实现UITableViewDataSource协议的对象。
(3) 让指定类实现UITableViewDataSource协议,并实现协议中两个必须实现的方法。
默认的UITableViewCell包含三个可配置的属性。
(1) textLabel:该属性是一个UILabel控件,代表该UITableViewCell显示的标题。
(2) detailTextLabel:该属性是一个UILabel控件,代表该UITableViewCell显示的详细内容。
(3) image:这是一个UIImage对象,代表UITableViewCell左边的图标。
获取UITableView控件之后,接下来可通过如下方法访问表格控件的表格行和分区:
(1) -cellForRowAtIndexPath:返回该表格中NSIndexPath对应的表格行。
(2) -indexPathForCell:获取该表格中指定行对应的NSIndexPath。
(3) -indexPathForRowAtPoint:返回表格中指定点所在的NSIndexPath。
(4) -indexPathsForRowsInRect:返回表格中指定区域内所有NSIndePath组成的数组。
(5) -visibleCells:返回表格中所有可见区域内的表格行组成的数组。
(6) -indexPathForVisibleRows:返回该表格中所有课件区域内的表格行对应的NSIndexPath组成的数组。
也可以通过如下方法来控制表格控件的滚动:
(1) -scrollToRowAtIndexPath:atScrollPosition:animation:控制该表格滚动指定NSIndexPath对应的表格行的顶端、中间或下方。
(2) -scrollToNearestSelectedRowAtScrollPosition:animation:控制该表格滚动到选中表格行的顶端、中间或下方。
处理单元格的选中
当表格控件允许选中时,默认情况下,当用户单击表格的某个表格行时,系统就会选中对应的表格行。UITableView提供了如下属性来配置表格的选中状态。
(1) allowsSelection:该属性控制该表格是否允许被选中。
(2) allowsMultipleSection:该属性控制该表格是否允许多选。
(3) allowsSelectionDuringEditing:该属性控制该表格处理编辑状态时是否被选中。
(4) allowsMultipleSelectionDuringEditing:该属性控制表格处理编辑状态时是否允许多选。
除此之外,也可通过UITableView提供如下方法来操作表格中被选中的行:
(1) -indexPathForSelectionRow:获取选中表格行对应的NSIndexPath。
(2) -indexPathForSelectionRows:获取所有被选中表格行对应的NSIndexPath组成的数组。
(3) -selectRowAtIndexPath:animation:scrollPosition:控制该表格选中指定NSIndexPath对应的表格行,最后一个参数控制是否滚动到被选中行的顶端、中间和底部。
(4) -deselectRowAtIndexPath:animation:控制取消选中该表格中指定NSIndexPath对应的表格行。
如果程序需要响应表格行的选中事件,这时候需要借助UITableView的委托对象,委托对象必须实现UITableViewDelegate对象——当UITableView表格行发生选中相关事件时,都会激发该委托对象的响应方法:
(1) -tableView:willSelectRowAtIndexPath:当用户将要选中表格中的某行时激发该方法。
(2) -tableView:didSelectRowAtIndexPath:当用户完成选中表格中的某行时激发该方法。
(3) -tableView:willDeselectRowAtIndexPath:当用户将要取消表格中的某行时激发该方法。
(4) -tableView:didDeselectRowAtIndexPath:当用户选中表格中的某行时激发该方法。
定制表格行
如果只是使用系统提供的UITableViewCell,UITableView控件的表格行只支持有限的样式,而且每个表格行只包含textLabel、detailTextLabel、UIImageView这三个控件。
为了自由定制控件的表格行,可通过如下方式完成:
(1) 继承UITableView定制表格行。
(2) 使用动态单元格定制表格行,即直接在IB上设置。
(3) 利用xib文件定义表格行。
编辑表格
UITableView生成的表格控件功能十分灵活,不仅可作为数据显示控件,还支持对表格行进行移动、删除和插入等操作。
UITableView提供了editing属性来判断该表格控件是否处于编辑状态,如果是返回YES,反之则NO。为了切换表格控件的编辑状态,UITableView提供了setEditing:animation:方法,如果第一个参数为YES,则为编辑状态。
除此之外,控件还具有插入、删除、移动表格行:
(1) -beginUpdates:对表格执行多个连续的插入、删除、移动操作前,先调用该方法开始更新。
(2) -endUpdates:当对表格控件执行多个连续的插入、删除移动操作后的,调用该方法提交并更新。
(3) -insertRowsAtIndexPaths:withRowAnimation:在一个或者多个NSIndexPath处插入表格行。
(4) -deleteRowsAtIndexPaths:withRowAnimation:删除一个或多个NSIndexPath处的表格行。
(5) -moveRowsAtIndexPath:将指定NSIndexPath处的表格行移动到另一个NSIndexPath处。
(6) -insertSections:withRowAnimation:在指定NSIndexSet所包含的一个或多个分区号对应的位置插入分区。
(7) -deleteSections:withRowAnimation:删除指定NSIndexSet所包含的一个或多个分区号对应的分区。
(8) -moveSection:toSection:将指定分区移动到另一个位置。
为了动态编辑表格,必须实现UITableView对应的dataSource对象中的如下方法:
(1) -tableView:willBeginEditingRowAtIndexPath:开始编辑某个表格行时激发该委托对象的该方法。
(2) -tableView:didEndEditingRowAtIndexPat:当编辑完某个表格行时激发该委托对象的该方法。
(3) -tableView:editingStyleForRowAtIndexPath:该方法的返回值决定了该表格行的编辑状态。
多分区表格以及分区索引
前面介绍的表格只有一个分区,如果希望UITableViews生成的表格控件包含更多的分区,则需要dataSource对象实现更多的方法:
(1) -numberOfSectionsInTableView:该方法的返回值决定该表格包含多少个分区。
(2) -sectionIndexFitlesForTableView:该方法的返回值用于在表格右边建立一列浮动的索引。
(3) -tableView:titleForHeaderInsection:该方法的返回值决定指定分区的页眉。
(4) -tabelView:titleForFooterInsection:该方法的返回值决定指定分区的页脚。