Какой самый эффективный способ перезагрузить все строки в табличном представлении, кроме первой ячейки? - PullRequest
0 голосов
/ 03 июля 2019

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

 let visibleIndex = self.tableView.visibleCells.compactMap {  
 tableView.indexPath(for: $0)  }
  self.tableView.reloadRows(at: visibleIndex, with: .automatic)

Однако это перезагружает все видимые ячейки, как мне перезагрузить все видимые ячейки, кроме первой строки

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Нет необходимости получать видимые клетки.Используйте indexPathsForVisibleRows и удалите путь индекса для секции 0, строки 0.

let allButFirst = (self.tableView.indexPathsForVisibleRows ?? []).filter { $0.section != 0 || $0.row != 0 }
self.tableView.reloadRows(at: allButFirst, with: .automatic)
2 голосов
/ 03 июля 2019

Предполагая, что первой видимой ячейкой является 1 на самой верхней точке, вы можете сделать

 self.tableView.reloadRows(at: Array(visibleIndex.dropFirst()), with: .automatic)

Или, если нет,

let visibleIndex = self.tableView.visibleCells.compactMap {
    tableView.indexPath(for: $0)  }.filter { $0.row != 0 } 
self.tableView.reloadRows(at: visibleIndex, with: .automatic)

==

let visibleIndex:[IndexPath] = self.tableView.visibleCells.compactMap { item in
    let index = self.tableView.indexPath(for:item)!
    return index.row != 0 ? index : nil
}
...