Какое событие используется для обнаружения поля UITextfield в состоянии null

я пытаюсь разработать текстовое поле, переключающееся с 1 на другое автоматически, точно так же я могу переключить текстовое поле назад , но в нулевом состоянии я не могу переключить курсор в предыдущее текстовое поле, я пытался с EditingChange событием, но когда текстовое поле в нулевом состоянии функция изменения Editng не запускается.

Код является :

@IBAction func textFieldEditingChanged(_ sender: UITextField) {

    if(sender.text?.characters.count == 1) {
        switch sender {
        case otpField1:
            otpField2.becomeFirstResponder()
        case otpField2:
            otpField3.becomeFirstResponder()
        case otpField3:
            otpField4.becomeFirstResponder()
        case otpField4:
            otpField4.resignFirstResponder()
        default:
            break
        }
    }else {

    }

    if ((sender.text?.characters.count)! <= 0 || sender.text! == "" || sender.text?.isEmpty == true) {

        switch sender {
        case otpField4:
            otpField3.becomeFirstResponder()
        case otpField3:
            otpField2.becomeFirstResponder()
        case otpField2:
            otpField1.becomeFirstResponder()
        case otpField1:
            otpField1.resignFirstResponder()
        default:
            break

        }
    }

}

3 ответа

  1. Для того чтобы найти UITextFieldпустое вы можете использовать isEmptyString.

    Так вот оно будет:

    sender.text.isEmpty
    

    Как я буду использовать это

    guard let email = emailTextField.text, !email.isEmpty else {
             return
    }
    

    Надеется, что это решит вашу проблему.

  2. Вместо того, чтобы реализовать делегат textfield shouldChangeCharactersInRangeи проверить там, вероятно, нужно проверить на ноль и некоторые другие вещи, но это идея:

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let newLength = (textField.text?.characters.count)! - range.length + string.characters.count
    
        if (textField.text?.characters.count)! > 0 && newLength == 0 {
    
            textField.text = ""
    
            switch textField {
             ....
            }
        }
        return true
    }
    
  3. Вы можете найти с условием, как

    if textField.isEmpty or textField.text == "" {
       // Do your stuff here when textField is empty
    }
    else {
      // Do your stuff when textField is not empty
    }