如何在闭包内更改 UILabel 的内容
How to change content of UILabel inside of a closure
我无法在闭包内更改 UILabel 的内容。我用谷歌搜索,但找不到解决方案。
这是我的代码的相关部分:
class ViewController: UIViewController {
@IBOutlet var city: UITextField!
@IBOutlet var message: UILabel!
@IBAction func buttonPressed(sender: AnyObject) {
var urlString = "http://google.com"
var url = NSURL(string: urlString)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!) {(data, response, error) in
self.message.text = "try"
println("done")
}
task.resume()
}
... //rest of the code
当我点击按钮时,它应该用 "try" 改变 UILabel 消息的内容。它在控制台中打印出 "done",但不会更改 UILabel 的内容。
您可以在主线程上使用 dispatch_async
来更改它。 UI 更新必须在主线程中完成。 dataTaskWithURL
在后台线程中执行。
let task = session.dataTaskWithURL(url!) {(data, response, error) in
if (error == nil)
{
dispatch_async(dispatch_get_main_queue(),
{
self.label.text = "Updated"
})
}
}
我刚遇到同样的问题。我已经包裹了
UILabel.text = newTitle
在 DispatchQueue.main.async{}
块中,但没有用。仔细检查后,我发现我不小心在声明 UILabel 的视图控制器之外声明了函数。以为我会写这个以防其他人遇到同样的问题!不要忘记检查您的 indentations:D
我无法在闭包内更改 UILabel 的内容。我用谷歌搜索,但找不到解决方案。
这是我的代码的相关部分:
class ViewController: UIViewController {
@IBOutlet var city: UITextField!
@IBOutlet var message: UILabel!
@IBAction func buttonPressed(sender: AnyObject) {
var urlString = "http://google.com"
var url = NSURL(string: urlString)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!) {(data, response, error) in
self.message.text = "try"
println("done")
}
task.resume()
}
... //rest of the code
当我点击按钮时,它应该用 "try" 改变 UILabel 消息的内容。它在控制台中打印出 "done",但不会更改 UILabel 的内容。
您可以在主线程上使用 dispatch_async
来更改它。 UI 更新必须在主线程中完成。 dataTaskWithURL
在后台线程中执行。
let task = session.dataTaskWithURL(url!) {(data, response, error) in
if (error == nil)
{
dispatch_async(dispatch_get_main_queue(),
{
self.label.text = "Updated"
})
}
}
我刚遇到同样的问题。我已经包裹了
UILabel.text = newTitle
在 DispatchQueue.main.async{}
块中,但没有用。仔细检查后,我发现我不小心在声明 UILabel 的视图控制器之外声明了函数。以为我会写这个以防其他人遇到同样的问题!不要忘记检查您的 indentations:D