Ios 如何在按下按钮时更改UILabel文本
我想更改标签的文本,以便在润色行动CAL时了解进度状态。以下是一个例子:Ios 如何在按下按钮时更改UILabel文本,ios,swift,Ios,Swift,我想更改标签的文本,以便在润色行动CAL时了解进度状态。以下是一个例子: @IBOutlet weak var stsLabel: UILabel! // label to show to user, the progress position @IBAction func updateDB(_ sender: Any) { stsLabel.text = "creating table" // do some stuf stsLabel.text = "i
@IBOutlet weak var stsLabel: UILabel! // label to show to user, the progress position
@IBAction func updateDB(_ sender: Any) {
stsLabel.text = "creating table"
// do some stuf
stsLabel.text = "inserting table A"
// some code
// and i have some cases again
stsLabel.text = "Complete"
}
func setTitle(label:UILabel, title:String){
DispatchQueue.main.async(execute: { () -> Void in
label.text = title
})
}
该代码将仅在操作完成时更改标签文本。我试过用setTitlessLabel,任何文本,这也没有帮助。请帮我解决这个问题。
信息:我使用的是swift的3个版本。由于您没有提供足够的信息来提供全面的答案,此答案基于最佳猜测,因此可能不准确 如果在主线程上执行do Anything代码,那么当所有操作都完成时,您将看到UI更新,因为您正在阻止主线程 如果您的代码如下所示:
@IBAction func updateDB(_ sender: Any) {
stsLabel.text = "creating table"
DispatchQueue.global().async {
// do some stuf
}
stsLabel.text = "inserting table A"
DispatchQueue.global().async {
// some code
// and i have some cases again
}
stsLabel.text = "Complete"
}
然后问题是dosomestuff代码是异步执行的,因此所有的文本分配都在主线程上一个接一个地执行,因此您将只看到最后一个,因为其他两个太快,无法看到
如果您的代码如下所示:
@IBAction func updateDB(_ sender: Any) {
stsLabel.text = "creating table"
DispatchQueue.global().async {
// do some stuf
stsLabel.text = "inserting table A"
// some code
// and i have some cases again
stsLabel.text = "Complete"
}
}
@IBAction func updateDB(_ sender: Any) {
stsLabel.text = "creating table"
DispatchQueue.global().async {
// do some stuf
DispatchQueue.main.async(execute: { () -> Void in
stsLabel.text = "inserting table A"
})
// some code
// and i have some cases again
DispatchQueue.main.async(execute: { () -> Void in
stsLabel.text = "Complete"
})
}
}
然后问题是所有与UI相关的东西都必须放在主线程上。脱离主线程进行更新的结果将导致更新发生巨大延迟,在某些情况下可能导致崩溃
做这类事情的健康方法是在主线程上调度UI操作。代码应该如下所示:
@IBAction func updateDB(_ sender: Any) {
stsLabel.text = "creating table"
DispatchQueue.global().async {
// do some stuf
stsLabel.text = "inserting table A"
// some code
// and i have some cases again
stsLabel.text = "Complete"
}
}
@IBAction func updateDB(_ sender: Any) {
stsLabel.text = "creating table"
DispatchQueue.global().async {
// do some stuf
DispatchQueue.main.async(execute: { () -> Void in
stsLabel.text = "inserting table A"
})
// some code
// and i have some cases again
DispatchQueue.main.async(execute: { () -> Void in
stsLabel.text = "Complete"
})
}
}
使用UIButton控制状态的触地操作将完成哪些操作?因为如果有一个完成框,你可以在那里更新标签。操作是按钮润色。请看一下图片我们需要看看是什么做了些什么来告诉你发生了什么。我的最佳猜测是,该操作不是异步的,因此在完成所有操作后,您将获得UI更新,因为您正在阻止主线程。DispatchQueue.globalattributes:。qosUserInitiated获取错误参数标签的属性:'不匹配任何可用的重载我使用DispatchQueue.global.async,它可以工作,非常感谢