所以我正在从UiTextfield(用户输入)进行UILabel实时更新。我正在使用此帖子中的代码Swift3: Live UiLabel update on user input
但不知何故,当我完全删除UITextField中的文本时,我的UILabel总是留下一个字符。就像这里的.gif http://g.recordit.co/SPQWnYtHJg.gif
一样似乎总有一个角色丢失,如下图所示
这是我使用的代码
import UIKit
class CreateEventVC: UIViewController {
@IBOutlet weak var eventNameTextField: UITextField!
@IBOutlet weak var eventNameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//initial value
eventNameLabel.text = " "
// delegate declaration
eventNameTextField.delegate = self
}
}
extension CreateEventVC : UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
eventNameLabel.text = eventNameTextField.text
return true
}
}
我最初怀疑是因为我在viewDidload
中添加了这一行eventNameLabel.text = " "
但是如果我删除了这个,问题仍然存在
我该怎么办?
答案 0 :(得分:1)
textField:shouldChangeCharactersIn:range:replacementString
,这样您的应用就可以否决请求并过滤掉不需要的内容。
问题是,你依赖于文本字段的文本。相反,您需要根据传递给委托的信息构建结果值并应用
也许更喜欢......
extension CreateEventVC: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let text = textField.text ?? ""
eventNameLabel.text = (text as NSString).replacingCharacters(in: range, with: string)
return true;
}
}
答案 1 :(得分:0)
class CreateEventVC: UIViewController {
@IBOutlet weak var eventNameTextField: UITextField!
@IBOutlet weak var eventNameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//initial value
eventNameLabel.text = " "
eventNameTextField.addTarget(self, action: #selector(onTextFieldTextDidChange), for: .editingChanged)
}
@objc func onTextFieldTextDidChange() {
eventNameLabel.text = eventNameTextField.text
}
}
说明:
我们将target添加到eventNameTextField,每次更改textField文本时都会调用onTextFieldTextDidChange func。