我在更新标签时遇到问题,似乎无法在互联网上找到任何解决方案。我需要标签在文本发生变化时立即更新。我只是使用一个简单的观察者。
var updateLabel: String = "" {
didSet {
label.text = updateLabel //This doesn't update
print(updateLabel) //This Prints
}
}
var count: Int? = 0
while (count! < 1000000) {
count!++
updateLabel = "\(count!)"
}
我试过这个,但没有用。
dispatch_async(dispatch_get_main_queue()) {
}
setNeedsDisplay()
答案 0 :(得分:4)
默认情况下,控件不会立即更新,而是在下一个运行循环中更新。
由于您循环了一百万次,因此您阻止了更新,并且甚至不会应用您尝试对UI进行的999,999次更改。
在运行循环获得控制权之前,不会提交您对UI所做的最后一次更改。
另外,调用setNeedsDisplay
只会让系统知道标签需要在下一个运行循环中更新。正如您所想,它不会立即更新它。但它真的是多余的,因为更改标签的文本已将标签标记为需要更新。