【问题标题】:Bug? UILabel live updating by UITextFieldDelegate is off by one character漏洞? UITextFieldDelegate 的 UILabel 实时更新关闭了一个字符
【发布时间】:2017-07-07 02:43:48
【问题描述】:

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

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

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

【问题讨论】:

标签: ios swift uitextfield uilabel uitextfielddelegate


【解决方案1】:

您可以使用EditingChanged,而不是使用委托方法shouldChangeCharactersIn,如下所示。

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
    }
}

【讨论】:

  • 感谢您的快速回复!您能否更具体一点,我找不到具有关键字“EditingChanged”的函数。谢谢!
  • 更新了我的答案。
  • 我今天早些时候尝试了“Value Changed”,但没有成功。但是“编辑更改”真的很棒!谢谢!
【解决方案2】:

您也可以使用 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
}

【讨论】:

    猜你喜欢
    • 2020-12-23
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多