如何:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
不同于:
func cellForRow(at indexPath: IndexPath) -> UITableViewCell?
我最近遇到了一个错误,我正在扩展UITableView
以便能够迭代给定部分中的行。
func forRows(inSection section: Int, condition: (UITableViewCell) -> ()) {
for row in 0..<numberOfRows(inSection: section) {
let cell = cellForRow(at: IndexPath(row: row, section: section))!
condition(cell)
}
}
^^^不起作用,最后一行的单元格为零
func forRows(inSection section: Int, condition: (UITableViewCell) -> ()) {
for row in 0..<dataSource!.tableView(self, numberOfRowsInSection: section) {
let cell = dataSource!.tableView(self, cellForRowAt: IndexPath(row: row, section: section))
condition(cell)
}
}
^^^有效。我明白了,但我不明白。
tableView委托方法与tableView本身的等效方法之间有什么不同?
答案 0 :(得分:2)
数据源旨在提供单元格,然后创建它们,但您要创建它们。通常,这涉及使可重复使用的细胞出列或创建新的细胞。
当您在表格视图上调用cellForRow(at indexPath: IndexPath)
时,它会为您提供已存在的单元格(如果有)。
答案 1 :(得分:1)
委托方法(严格说出UITableViewDataSource
也是委托)由框架调用以询问某些内容或指示某个特定内容工作流程中的阶段。
您不得自行调用委托方法。
类或实例方法可以无关紧要地使用。
答案 2 :(得分:0)
我不知道这是否是您的具体情况,因为我需要更多信息,但
func cellForRow(at indexPath: IndexPath) -> UITableViewCell?
如果单元格在屏幕中不可见,则返回nil
。
在另一种方法中,表格将加载&#34;为您指定特定索引路径的单元格