web-dev-qa-db-fra.com

RxSwift / RxCocoa: empêcher UITextField d'avoir plus de ... caractères

J'aimerais avoir un UITextField configuré avec RxSwift/RxCocoa afin qu'il ne contienne que jusqu'à ... caractères. Je ne veux pas utiliser le UITextFieldDelegate pour cela, mais j'aimerais y parvenir avec RxSwift/RxCocoa. Y a-t-il un moyen de faire cela?

13
swalkner

Sûr:

textField.rx.controlEvent(.editingChanged).subscribe(onNext: { [unowned self] in
    if let text = self.textField.text {
        self.textField.text = String(text.prefix(40))
    }
}).disposed(by: disposeBag)

Dans cet exemple, le champ de texte est limité à 40 caractères.

Éditer:

Conserver la valeur précédente lorsque la limite est atteinte.

textField.rx.text.orEmpty
.scan("") { (previous, new) -> String in
    if new.count > 40 {
        return previous ?? String(new.prefix(40))
    } else {
        return new
    }
}
.subscribe(textField.rx.text)
.disposed(by: disposeBag)

Cela peut probablement être adapté pour respecter d'autres règles ...

Veuillez noter cependant que lorsque vous atteignez la limite de caractères, votre curseur sautera à la fin du champ de texte.

21
Valérian