错误?通过UITextFieldDelegate的UILabel现场更新是关闭的一个字符

问题描述:

这里是一个示例应用程序,以证明我碰到了这个问题:错误?通过UITextFieldDelegate的UILabel现场更新是关闭的一个字符

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

我的问题是,如何使它与我在文本框中输入的内容完全同步?谢谢!

+0

见例如https://stackoverflow.com/questions/28394933/how-do-i-check-when-a-uitextfield-changes。 –

而不是使用代理方法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 
    } 
} 

enter image description here

+0

感谢您的快速响应!你能不能更具体一点,我找不到有关键字“EditingChanged”的函数。谢谢! –

+0

更新了我的答案。 – Lawliet

+0

今天早些时候我尝试了“Value Changed”,它没有奏效。但“编辑改变”的作品真的很棒!谢谢! –

你可以做到这一点使用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 
}