Gérer la saisie dans un UItextField sans bouton de validation ?


#1

je pense que c’est possible mais je ne sais pas comment.
L’idée est de ne saisir que des chiffres et de valider directement après la saisie du nième (4 ou 5) sans avoir à cliquer sur un bouton de validation.
D’ailleurs je n’utilise que le clavier numérique et lui même n’a pas de bouton de validation.
Facile ou … pas ? :wink:


#2

Hello @grattours

Je ne l’ai jamais fait, mais il me semble que pour le UITextField, tu peux restreindre l’utilisateur à des nombres assez facilement avec le Storyboard, et ensuite, via le UITextFieldDelegate, il doit surement avoir une méthode qui permet de faire une action juste après l’ajout d’un caractère (d’un chiffre dans ton cas). Il ne reste plus qu’à compter le nombre de chiffre entré, et à lancer la méthode de validation lorsque tu as le nombre de chiffre que tu veux.

Bonne journée,

Alexandre


#3

Merci pour la réponse,
j’utilise “inputNumberTextField?.keyboardType = UIKeyboardType.numberPad” dans le viewDidLoad(), je n’ai que que clavier numérique qui apparait, donc pas besoin de filtrer.
je suis une piste avec UITextFieldDelegate et .addtarget… j’approche… enfin j’espère
:wink:


#4

Ca marche aussi via le code, en effet :grin:
Pour le addTarget, c’est ce qu’il faut faire il me semble (vu sur le net rapidement).

Tiens moi au courant si tu n’y arrives pas :slight_smile:

Bon amusement,

Alexandre


#5

je crois que j’y suis,
:wink: pas besoin de validation, je compte et quand c’est ok je continue

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var inputNumberTextField: UITextField!
    
    var nbreLimitDeCar: Int = 4
    
    override func viewDidLoad() {
        super.viewDidLoad()
        inputNumberTextField?.delegate = self
        inputNumberTextField?.addTarget(self, action: #selector(numberDidEntered(textField:)), for:UIControl.Event.editingChanged)
    }
    
    @objc func numberDidEntered(textField:UITextField) {
        print(inputNumberTextField?.text?.count ?? 0)
        if inputNumberTextField?.text?.count ?? 0 < nbreLimitDeCar
        {
            return
        }
        print("bravo, vous avez saisi  \(String(describing: inputNumberTextField?.text)) qui est une nombre à  \(nbreLimitDeCar) chiffres")
        inputNumberTextField.text = ""
        
    }