How to do a live UITextField count while typing (Swift)?

后端 未结 10 1198
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-05 13:37

I would like to count the character when user keep typing in UITextField with swift.

Image of Field and Label:

相关标签:
10条回答
  • 2020-12-05 14:30

    Swift 5.3

    Add UITextFieldDelegate in you viewController with outlets

    class ViewController: UIViewController, UITextFieldDelegate{
         @IBOutlet weak var txtGroupName: UITextField!
         @IBOutlet weak var lblWordCount: UILabel!
    

    Add textfeild delegate in your viewDidLoad() like below

    override func viewDidLoad() {
       super.viewDidLoad()
       txtGroupName.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControl.Event.editingChanged)
      }
        
       @objc func textFieldDidChange(textField : UITextField){
        self.lblWordCount.text = "\(self.txtGroupName.text!.count)/"+"\(65)"
      }
    

    We have set also meximum text limit 65 . you can replace 65 to what you want.

    extension viewController:UITextFieldDelegate{
        func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
            if !(textField.text?.isEmpty ?? true){
                return textField.text!.count +  (string.count - range.length) <= 65
            }
            return true
        }
    }
    

    It's output is like below

    0 讨论(0)
  • 2020-12-05 14:35
    In Swift
    viewDidLoad {
    self.yourTextView.delegate = self
    self.updateCharacterCount()
    }
    
    func updateCharacterCount() {
        self.yourLabel.text = "\((65) - self.yourTextView.text.characters.count)"  
    }
    
    func textViewDidChange(textView: UITextView) {
        self.updateCharacterCount()
    }
    
    
    func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
        self.updateCharacterCount()
        return textView.text.characters.count +  (text.characters.count - range.length) <= 65
    }
    
    0 讨论(0)
  • 2020-12-05 14:38

    Swift 4 for UITextView change text event UITextViewDelegate

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    
    }
    
    0 讨论(0)
  • 2020-12-05 14:40

    A very elegant and neat solution exists using UITextFieldDelegate. My solution uses the concept of selectors. In a selector you tell your compiler what function/action to perform when a particular event happens. In this case - typing in textfield. Make sure that you have set the textField delegate in storyboard.

    override func viewDidLoad() {
       super.viewDidLoad()
       yourTextField.addTarget(self, action: #selector(YourViewController.textFieldDidChange(_:)), for: UIControlEvents.EditingChanged)
    }
    
    @objc func textFieldDidChange(textField : UITextField){
       label.text = yourTextField.text?.count
    }
    
    0 讨论(0)
提交回复
热议问题