【问题标题】:update text field ui in swift ios在swift ios中更新文本字段ui
【发布时间】:2014-09-01 10:16:22
【问题描述】:

我在使用 swift of 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;
        }
    }
}

运行此代码,数据被正确提取,txtTest 没有更新,但是当我点击 txtTest 时,将显示该值。那么有什么办法可以强制更新 UI 呢?或向 UI 线程发送消息?

【问题讨论】:

    标签: ios user-interface background swift textfield


    【解决方案1】:

    每个人想要在 Swift 中进行 UI 更新时都会遇到同样的问题:永远不要在任何辅助线程中更新 UI。这意味着任何有闭包的东西。由于 Swift 大量使用闭包,因此这个问题被更多人看到,但这并不是什么新鲜事。

    查看Swift Update Label (with HTML content) takes 1min了解正确的做事方式。

    【讨论】:

      【解决方案2】:

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

      对于 swift 3 和 swift 4

      DispatchQueue.main.async {
          self.txtTest.text = "Your text"
      }
      

      相关重复问题但有具体答案

      iOS label does not update text with function in Swift

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        • 2017-11-07
        • 1970-01-01
        相关资源
        最近更新 更多