漏洞? UITextFieldDelegate 的 UILabel 实时更新被一个字符关闭

Bug? UILabel live updating by UITextFieldDelegate is off by one character

这是一个示例应用程序,用于演示我 运行 遇到的问题:

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var aTextField: UITextField!
    @IBOutlet weak var aTextLbl: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        aTextField.delegate = self
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        aTextLbl.text = aTextField.text
        return true
    }
}

这是一个演示:

Link to Animated Gif

我的问题是,如何使标签与我在文本字段中键入的内容完全同步?谢谢!

除了使用委托方法 shouldChangeCharactersIn,您还可以使用 EditingChanged,如下所示。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var aTextLbl: UILabel!
    @IBOutlet weak var aTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func editingChanged(_ sender: UITextField) {
        aTextLbl.text = aTextField.text
    }
}

您也可以使用 UITextFieldDelegate 函数执行此操作。

您需要手动附加带有 textField.text 值的字符串,如下所示:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let currentText = txtFldPassword.text
    let newText = (currentText! as NSString).replacingCharacters(in: range, with: string)
    print(newText)

    return true
}