在swift ios中更新文本字段ui

Bru*_* Bu 3 user-interface background textfield ios swift

当我使用swift的ios SDK 8时,我遇到了一个问题

我使用回调来获取数据背景,当获取数据时,我想设置文本字段值并更新屏幕.

这是我的代码:

@IBOutlet var txtTest: UITextField!

@IBAction func login() {
    let username = "aaa";
    let password = "bbb";
    var res = ServiceClient.login(username, password: password){
        (res:String, error:String?) -> Void in if(error == nil){
            self.txtTest.text = res;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此代码并正确获取数据并且txtTest未更新,但是当我点击txtTest时,将显示该值.那么有没有办法强制更新UI?或者向UI线程发送消息?

Rik*_*les 6

想要在Swift中进行UI更新时,每个人都有同样的问题:不要在任何辅助线程中更新UI.这意味着任何有封闭的东西.由于Swift使用了很多关闭,所以这个问题看起来要多得多,但并不是新的.

请参阅Swift更新标签(包含HTML内容),需要1分钟才能获得正确的处理方式.


Ray*_*ker 5

UIKit不是线程安全的,只能从主线程进行更新。下载是在后台线程上完成的,您不能从那里更新UI。尝试:

快速3和快速4

DispatchQueue.main.async {
    self.txtTest.text = "Your text"
}
Run Code Online (Sandbox Code Playgroud)

相关重复问题,但有特定答案

iOS标签无法使用Swift中的功能更新文本