如何在闭包内部更改UILabel的内容

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

我无法在闭包内更改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消息的内容。它在控制台中打印出“完成”,但不会更改UILabel的内容。

ios swift uilabel closures
2个回答
0
投票

您可以通过在主线程上使用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"
       })
    }
}

0
投票

我只是有同样的问题。我已经包好了UILabel.text = newTitle块中的DispatchQueue.main.async{},但无效。经过仔细检查,我发现我不小心在声明了UILabel的视图控制器外部声明了该函数。以为我会写这个,以防其他人遇到同样的问题!别忘了检查您的缩进:D

© www.soinside.com 2019 - 2024. All rights reserved.