漏洞? 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
}
}
这是一个演示:
我的问题是,如何使标签与我在文本字段中键入的内容完全同步?谢谢!
除了使用委托方法 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
}
这是一个示例应用程序,用于演示我 运行 遇到的问题:
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
}
}
这是一个演示:
我的问题是,如何使标签与我在文本字段中键入的内容完全同步?谢谢!
除了使用委托方法 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
}