使用Swift在一个函数中多次更新Textview文本

时间:2017-05-23 21:30:22

标签: swift uikit uitextview

我一直在使用Xcode编写一个简单的程序,其中随机生成密码并用于编码字符串。偶尔生成一个字符串需要非常长的时间。所以我想我会在文本视图中显示生成的编码字符串,以向用户显示程序正在运行。

<!-- language: swift -->
@IBOutlet weak var textViewer: UITextView!
@IBOutlet weak var generate: UIButton!
@INOutlet weak var inputText: UITextField

var codeType = true

func Encode(text: String) -> String {
    // lots of string manipulation
    for foo { // A for loop iterating through every char of text
        code += secretMessage[foo]
        textViewer.text = code
    }
    return code
}

@IBAction func GenerateCode(_ sender: UIButton) {
    var message = "Well Something Went Wrong"
    if self.codeType = true { // Check if user is encoding or decoding
       message = Encode(text: inputText.text!)
    }
    textViewer.text = message
}

但是文本字段只会在函数完成生成代码后才会更新。如何逐个字符而不是一次性更新文本字段

1 个答案:

答案 0 :(得分:0)

您可能需要在主队列上调度文本更新以获取文本字段的可视状态。其中一个关键指标是控制台中的错误消息。类似于&#34;尝试更新视觉布局&#34;应该有类似以下的东西来尝试解决问题

func encode(text: String) -> String {
    // lots of string manipulation
    for foo { // A for loop iterating through every char of text
        code += secretMessage[foo]
        DispatchQueue.main.async {
            self.textViewer.text = code
        }
    }
    return code
}

@IBAction func GenerateCode(_ sender: UIButton) {
    var message = "Well Something Went Wrong"
    if self.codeType = true { // Check if user is encoding or decoding
       DispatchQueue.global(qos: .background).async {
           message = Encode(text: inputText.text!)
       }
    }
    // textViewer.text = message // Shouldn't need this line anymore
}