Данные tableView перезагружаются при каждой прокрутке - PullRequest
0 голосов
/ 25 сентября 2018

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

func numberOfSections(in tableView: UITableView) -> Int {
    return self.numberOfElements
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 6
}

Мои ячейки действительно настроены, и им требуется расстояние между ними.Я не мог добавить дополнительный Вид в свою ячейку, чтобы подделать это расстояние, потому что у меня есть угловой радиус, и он просто разрушает его.Поэтому я должен был сделать каждую строку = секцию и установить интервал как высоту секции.

Моя ячейка имеет динамическую высоту и может изменять ее высоту, когда я нажимаю кнопку «еще», поэтому ячейка немного расширяется.

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if self.segmentedControl.selectedSegmentIndex == 0 {
        if self.isCellSelectedAt[indexPath.section] {
            return self.fullCellHeight
        } else {
            return self.shortCellHeight
        }
    } else {
        return 148
    }
}

И вот как я настраиваю свою ячейку:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = UITableViewCell()

    if self.segmentedControl.selectedSegmentIndex == 0 {
        cell = tableView.dequeueReusableCell(withIdentifier: String.className(CurrentDocCell.self)) as! CurrentDocCell
        (cell as! CurrentDocCell).delegate = self
        (cell as! CurrentDocCell).ID = indexPath.section
    } else {
        cell = tableView.dequeueReusableCell(withIdentifier: String.className(PromissoryDocCell.self)) as! PromissoryDocCell
    }

    return cell
}

Итак, у меня есть сегментированный элемент управления, переключая который, я могу представить либо одну ячейку определенной высоты, либо другую, котораяявляется расширяемым.

В моем viewDidLoad у меня есть только эти настройки для tableView:

    self.tableView.registerCellNib(CurrentDocCell.self)
    self.tableView.registerCellNib(PromissoryDocCell.self)

И для расширения ячейки у меня есть этот метод делегата:

func showDetails(at ID: Int) {
    self.tableView.beginUpdates()
    self.isCellSelectedAt[ID] = !self.isCellSelectedAt[ID]
    self.tableView.endUpdates()
}

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

1 Ответ

0 голосов
/ 25 сентября 2018

UITableView загружает только ту часть своего источника данных, которая отображается в данный момент.Это значительно повышает производительность просмотра таблицы, особенно если источник данных содержит тысячи записей.

Таким образом, при прокрутке происходит обычная перезагрузка необходимых частей источника данных.

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