UITableView方法和等效的UITableViewDatasource方法有什么区别?

时间:2017-02-17 18:21:16

标签: ios swift uitableview

如何:

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本身的等效方法之间有什么不同?

3 个答案:

答案 0 :(得分:2)

数据源旨在提供单元格,然后创建它们,但您要创建它们。通常,这涉及使可重复使用的细胞出列或创建新的细胞。

当您在表格视图上调用cellForRow(at indexPath: IndexPath)时,它会为您提供已存在的单元格(如果有)。

答案 1 :(得分:1)

  • 委托方法(严格说出UITableViewDataSource也是委托)由框架调用以询问某些内容或指示某个特定内容工作流程中的阶段。
    您不得自行调用委托方法

  • 类或实例方法可以无关紧要地使用。

答案 2 :(得分:0)

我不知道这是否是您的具体情况,因为我需要更多信息,但

func cellForRow(at indexPath: IndexPath) -> UITableViewCell?
如果单元格在屏幕中不可见,则

返回nil。 在另一种方法中,表格将加载&#34;为您指定特定索引路径的单元格