gpt4 book ai didi

ios - UILabel 无法正确更新

转载 作者:行者123 更新时间:2023-11-29 05:12:57 25 4
gpt4 key购买 nike

我是一名初学者,正在 Xcode (Swift) 中开发 iOS 应用程序。出于某种原因,我可以使用 UILabel 的属性 .text 设置文本,但如果我尝试更新它,标签将只显示我设置的最后一个值(??)。例如,以下是当我单击名为 myButton 的按钮并尝试在名为 Display 的标签中设置文本时执行的代码。结果是仅显示第四个值(“四”)(在三个 2 秒延迟之后),因为 UILabel 在该点之前保持空白。真正奇怪的是,如果我删除除第一行(Display.text =“One”)之外的所有内容,它会很好地显示它。就好像编译器删除了标签的除最后一个属性设置之外的所有设置......感谢任何帮助!!

@IBAction func myButton(_ sender: Any)
{
Display.text = "One"
sleep(2)
Display.text = "Two"
sleep(2)
Display.text = "Three"
sleep(2)
Display.text = "Four"
}

更新:此代码只是一个示例,演示了我在实际程序中遇到的问题。 sleep() 调用只是为了模拟延迟。问题是我似乎无法两次设置 UILabel 的文本。在我的代码中,我调用一个需要时间执行的函数,因此我想在标签中显示“等待...”直到完成,然后我想在同一标签中显示结果。但没有运气...

更新 2:我在 Apple 文档中找到了这一点:“您可以通过将 NSString 对象分配给 text 属性或将 NSAttributedString 对象分配给 attributeText 属性来提供标签的内容。标签 显示最近的内容这些属性的集合。”最近的?这似乎是我的问题。我怎样才能强制它按需更新???

最佳答案

不要使用sleep,它会阻塞主线程

let arr = ["one","two","three","four"]
var counter = 0
Timer.scheduledTimer(withTimeInterval:2.0, repeats:true) { timer in
self.counter += 1
if counter < self.arr.count {
self.display.text = self.arr[counter]
}
else {
timer.invalidate()
}
}

或者使用DispatchQueue.main.asyncAfter

arr.indices.forEach {
DispatchQueue.main.asyncAfter(deadline: .now() + Double( $0 * 2) ) {
self.display.text = self.arr[$0]
}
}

关于ios - UILabel 无法正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59503456/

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