谁在为UITableView调用reloadData方法

时间:2018-06-30 06:00:24

标签: ios uitableview

听起来听起来很奇怪,但是我不明白为什么我的tableView显示单元格。

我有应该在单元格中显示的项目数组,但是我没有在代码的任何地方运行tableView的reloadData方法。似乎某些应用程序组件或应用程序内部的框架正在调用reloadData方法,而我想找出是哪个?

如何完成?

2 个答案:

答案 0 :(得分:2)

表视图在第一次添加到窗口层次结构时会加载自身。您无需显式调用reloadData即可使表最初加载。

如果您想了解如何完成此操作,请在表视图数据源方法上设置一个断点,并调出表视图。查看调试器中的堆栈跟踪以查看事件的顺序。

答案 1 :(得分:1)

如果您的数据准备需要一些时间,并且您不希望表格视图最初显示任何数据,则可以使用以下方法:

class TableViewController: UITableViewController {

    var someDataSource: [Any]!
    var dataSourcePrepared = false {
        didSet {
            tableView.reloadData()
        }
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        guard dataSourcePrepared else { return 0 }
        return someDataSource.count
    }

    func doSomePreparationStuff() {
        // ...
        // ...
        someDataSource = ["Some", "Content"]
        dataSourcePrepared = true
    }

}

在这种情况下,我使用了Bool变量dataSourcePrepared,最初是false。准备好内容后,将其设置为true,然后重新加载表格视图。