gpt4 book ai didi

swift - UILabel 不会随计时器更新

转载 作者:行者123 更新时间:2023-11-30 10:38:50 26 4
gpt4 key购买 nike

我尝试使用此代码在每次时间改变一分钟时更新自定义单元格的 uilabel 的时间。

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { [weak self] _ in
if let s = self, let tableView = s.tableView, let indexPaths = tableView.indexPathsForVisibleRows {
for indexPath in indexPaths {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "PersonCell", for: indexPath) as? PersonCell else { return }
let person = s.people[indexPath.section]
cell.time.attributedText = dateIn(timeZone: person.timeZone)
}
}
})
}

这是 dateIn 函数,以 NSAttributedString 形式返回当前时间:

func dateIn(timeZone: TimeZone) -> NSMutableAttributedString {
let dateFormatter: DateFormatter = DateFormatter()
var now: Date {
return Date()
}
// The styles of the dateformatter are configured to show only the time
dateFormatter.dateStyle = .none
dateFormatter.timeStyle = .short
dateFormatter.timeZone = timeZone

// Returns time in chosenTimeZone as a string
let date = dateFormatter.string(from: now)

// The AM/PM is attributed so it can have a smaller font size than the time
let attributedTime = NSMutableAttributedString(string: "\(removeAmPm(from: date))")
let attributedAmPm = amPmAttributed(from: date)
attributedTime.append(attributedAmPm)

return attributedTime
}

Time 是一个 UILabel,它是 PersonCell 类的一部分。由于某种原因,尽管 dateIn(timeZone: person.timeZone) 的值确实发生了变化(我用 print 语句检查过),但当时间发生变化时, UILabel 的内容不会更新。我查遍了互联网,但找不到除了使用 reloadData() 之外的其他解决方案,我不确定这对内存和速度是否有好处。

最佳答案

您必须调用另一个函数来更改所需单元格中的值。

使用这个

let cell = tableView.cellForRow(at:indexPath)

在您当前的实现中,单元格只是一个本地创建的变量。这不是您想要的单元格。

关于swift - UILabel 不会随计时器更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57298899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com