Я использую время обратного отсчета в tableView для каждой ячейки, как показано на рисунке.
TableView с таймером обратного отсчета
Если я использую следующий код для простой метки в контроллере, все работает нормально.
var duration = 0.0
func clock(){
Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { [weak self](Timer) in
guard let strongSelf = self else { return }
strongSelf.duration -= 0.01
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.hour,.minute,.second]
formatter.zeroFormattingBehavior = .pad
strongSelf.timerLabel.text = formatter.string(from: strongSelf.duration)
})
}
Но если я напишу аналогично для tableViewCell, это только покажет значения, но не обновит их.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:"myTimer", for: indexPath) as? UITableViewCell
let label = cell?.contentView.viewWithTag(13) as? UILabel
milisecondsClock(index: indexPath.row, label: label!)
return cell!
}
func milisecondsClock(index: Int,label: UILabel){
Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { [weak self](Timer) in
guard let strongSelf = self else { return }
strongSelf.myList[index] -= 0.01
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.hour,.minute,.second]
formatter.zeroFormattingBehavior = .pad
label.text = formatter.string(from: strongSelf.myList[index])
})
}
Как показать таймер в виде таблицы с обратным отсчетом в реальном времени?