1
votes

Désactiver le bouton tant que plusieurs champs de texte sont vides

J'ai le code suivant pour désactiver un bouton tant qu'un champ de texte est vide:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        let text = (textField.text! as NSString).replacingCharacters(in: range, with: string)

        if !text.isEmpty{
            addButton.isEnabled = true
        } else {
            addButton.isEnabled = false
        }
        return true
}

Cela fonctionne bien, mais maintenant que j'ai 3 champs de texte, je veux que le bouton soit uniquement activé , si tous les champs de texte ne sont pas vides. Jusqu'à présent, dès qu'un champ de texte est rempli, le bouton est activé.

Comment puis-je ajuster mon code pour ce faire?


0 commentaires

3 Réponses :


0
votes

Selon vos besoins, vous devez d'abord créer une prise pour chaque champ de texte et vous pouvez activer le bouton comme,

        @IBAction func textFieldValueChanged(_ sender: Any)
        {

        if firstTextField.text != "" && secondTextField.text != "" && thirdTextField.text != ""  {
            addButton.isEnabled = true
        } else {
            addButton.isEnabled = false
        }
        return true

Et connecter chaque champ de texte avec l'action ci-dessus pour valueChanged code > événement


0 commentaires

3
votes

Ajoutez une cible à tous les champs de texte pour l'événement .editingChanged et vérifiez si un champ de texte est vide. Si tous les champs de texte contiennent du texte, activez le bouton sinon désactivez le bouton.

class TestViewController: UIViewController, UITextFieldDelegate {    
    let addButton = UIButton()
    let textField1 = UITextField()
    let textField2 = UITextField()
    let textField3 = UITextField()

    override func viewDidLoad() {
        super.viewDidLoad()
        textField1.addTarget(self, action: #selector(textChanged(_:)), for: .editingChanged)
        textField2.addTarget(self, action: #selector(textChanged(_:)), for: .editingChanged)
        textField3.addTarget(self, action: #selector(textChanged(_:)), for: .editingChanged)
    }
    @objc func textChanged(_ textField: UITextField) {
        addButton.isEnabled = [textField1, textField2, textField3].contains { $0.text!.isEmpty }
    }
}


0 commentaires

0
votes

Eh bien, je ne pense pas que la réponse acceptée soit une solution élégante à ce problème. Je suggère d'ajouter l'observateur suivant dans votre viewDidLoad:

@objc func validate(){
    var filteredArray = [textFieldOne,textFieldTwo,textFieldThree,textFieldFour].filter { $0?.text == "" }
    if !filteredArray.isEmpty {
        button.isHidden = true
    } else {
        button.isHidden = false
    }
}

Ensuite, définissez le sélecteur:

NotificationCenter.default.addObserver(self, selector: #selector(validate), name: UITextField.textDidChangeNotification, object: nil)


0 commentaires