该UITableViewDataSource
协议定义了UITableView
用数据填充自身所需的方法。它定义了几个可选方法,但有两个是必需的(不是可选的):
// this method is the one that creates and configures the cell that will be
// displayed at the specified indexPath
– tableView:cellForRowAtIndexPath:
// this method tells the UITableView how many rows are present in the specified section
– tableView:numberOfRowsInSection:
此外,以下方法不是必需的,但也是一个好主意(也是数据源的一部分)
// this method tells the UITableView how many sections the table view will have. It's a good idea to implement this method even if you just return 1
– numberOfSectionsInTableView:
现在,该方法–tableView:cellForRowAtIndexPath:
将为您的每个可见单元格运行一次UITableView
。例如,如果您的数据数组有 10 个元素但只有 5 个可见,–tableView:cellForRowAtIndexPath:
则将运行 5 次。当用户向上或向下滚动时,将为每个可见的单元格再次调用此方法。
你说的是:“(该)数据源方法已经运行了 10 次以获得行数。” 不是真的。数据源方法–tableView:numberOfRowsInSection:
不运行 10 次获取行数。实际上这个方法只运行一次。此外,此方法之前运行,–tableView:cellForRowAtIndexPath:
因为表视图需要知道它必须显示多少行。
最后,该方法–numberOfSectionsInTableView:
也运行一次并且之前运行过,–tableView:numberOfRowsInSection:
因为表格视图需要知道有多少个部分。请注意,此方法不是必需的。如果您不实现它,表格视图将假定只有一个部分。
现在我们可以将注意力集中在UITableViewDelegate
协议上。该协议定义了与与UITableView
. 例如,它定义了管理单元格选择(例如,当用户点击单元格时)、单元格编辑(插入、删除、编辑等)、配置页眉和页脚(每个部分可以有页眉和页脚)的方法,等等。 中定义的所有方法UITableViewDelegate
都是可选的。实际上,您根本不需要实现UITableViewDelegate
表格视图的正确基本行为,即显示单元格。
一些最常见的方法UITableViewDelegate
是:
// If you want to modify the height of your cells, this is the method to implement
– tableView:heightForRowAtIndexPath:
// In this method you specify what to do when a cell is selected (tapped)
– tableView:didSelectRowAtIndexPath:
// In this method you create and configure the view that will be used as header for
// a particular section
– tableView:viewForHeaderInSection:
希望这可以帮助!