UILabel无法正确更新

问题描述 投票:0回答:1

我是初学者,正在使用Xcode(Swift)开发iOS应用。出于某种原因,我可以使用UILabel的属性.text设置文本,但是如果我尝试对其进行更新,则标签将仅显示我设置的最后一个值(??)。例如,这是当我单击名为myButton的按钮并尝试在名为Display的标签中设置文本时执行的代码。结果是,在UILabel保持空白之前,仅显示第四个值(“四个”)(在3个2秒的延迟之后)。真正奇怪的是,如果我删除除第一行(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的文本。在我的代码中,我调用了一个需要花费时间才能执行的函数,因此我想在标签中显示“ Wait ...”,直到完成,然后再在同一标签中显示结果。但是没有运气...

ios swift xcode uilabel
1个回答
0
投票

不使用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]
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.