UITableViewCell
можно использовать повторно, вы не можете обновить интерфейс ячеек, которые не отображаются (видимы), они просто не существуют или используются повторно для другой ячейки.
Повторно используемый означает, что представление ячейки (UITableViewCell) будет использоваться для любой другой ячейки, которая может только что попасть в границы tableView, это происходит при удалении строки или при прокрутке и ячейке выходит за границы таблицы и т.д. ...
Итак, это не проблема, но по замыслу.
Кстати, вы используете правильный метод tableView.cellForRow(at: IndexPath)
, он вернет ячейку, только если она отображается.
Вместо этого вы должны обновить свой источник данных и сохранить значение прогресса, когда при следующем отображении ячейки будет отображаться значение из источника данных, например:
struct CellData {
var progress: Float
}
var dataSource: [CellData]
Теперь, когда вам нужно обновить прогресс ячеек, вы можете просто обновить dataSource
, вот так
dataSource[index].progress = value
Затем вы вызываете либо UITableView.realoadData()
, чтобы обновить интерфейс всех видимых ячеек, либо вы можете обновить только этот конкретный index
, например:
if let cell = self.tableView.cellForRow(at: IndexPath(row: index, section: 0)) as? CustomCell {
cell.progressView.setProgress(value, animated: true)
}