Кто вызывает метод reloadData для UITableView - PullRequest
0 голосов
/ 30 июня 2018

Это может звучать странно, но я не понимаю, почему мой tableView показывает ячейки.

Я получил массив элементов, которые должны отображаться в ячейках, но я нигде не запускаю метод reloadData моего tableView в моем коде. Кажется, что некоторые из компонентов приложения или, возможно, фреймворки внутри приложения вызывают метод reloadData, и я хочу выяснить, какой из них?

Как это можно сделать?

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Если ваша подготовка данных занимает некоторое время, и вы не хотите, чтобы в табличном представлении изначально отображались какие-либо данные, вы можете использовать такой подход:

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, и представление таблицы будет перезагружено.

0 голосов
/ 30 июня 2018

Представление таблицы загружается само при первом добавлении в иерархию окон. Вам не нужен явный вызов reloadData для начальной загрузки таблицы.

Если вы хотите увидеть, как это действительно делается, установите точку останова в методах источника данных табличного представления и вызовите табличное представление. Посмотрите на трассировку стека в отладчике, чтобы увидеть последовательность событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...