更改UILabel文本有延迟,但为什么?

时间:2015-05-26 19:09:43

标签: ios swift uilabel

在我的应用中,我想设置UILabel的文字。该文本来自JSON对象。我将UILabel添加到我的故事板,设置IBOutlet并调用我的异步方法来获取我的JSON对象。 在响应方法中,我设置了UILabel的文本。但文本更改需要几秒钟。 当响应到来时,我将其打印到控制台。我可以看到,延迟不是来自异步方法。 响应来了,我可以在控制台中看到它。等待UIlabel更改后的几秒钟。 我不明白这种行为,有没有立即刷新UIlabel的技巧?

一些代码:

@IBOutlet weak var label_news: UILabel!;

override func viewDidLoad() {
    super.viewDidLoad()
    self.label_news.text = "CHANGE";
    rcall.GetNews_GET_NewsResponse_0(self.NewsResponseHandler);
}

func NewsResponseHandler(resp:NewsResponse!){
    self.label_news.text = resp.NewsText;
    println(resp.NewsText);
}

很抱歉,如果这是一个初学者问题,swift和故事板对我来说都是全新的。

最好的问候

2 个答案:

答案 0 :(得分:9)

与Rob在评论中所说的一样,所有UI更改都需要在主线程上完成。我还没有在Swift中实现它,但Objective-C和我假设的Swift在下面......

目标-C

dispatch_async(dispatch_get_main_queue(), ^{
    self.label_news.text = resp.NewsText;
});

夫特:

dispatch_async(dispatch_get_main_queue()) {
    self.label_news.text = resp.NewsText;
}

答案 1 :(得分:0)

c_rath的回答是正确的。在swift 3中,语法已经(再次)更改为

DispatchQueue.main.async {
    self. label_news?.text = resp.NewsText
}