问题
I would like to have a UITextField configured with RxSwift/RxCocoa so that it only contains up to ... characters. I do not want to use the UITextFieldDelegate
for this but would love to achieve this with RxSwift/RxCocoa. Is there a way to do this?
回答1:
Sure:
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)
In this example, the textfield is limited to 40 characters.
Edit:
Keeping the previous value when the limit is reached.
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)
This can probably be adapted to respect other rules...
Please note however that when reaching the character limit, your cursor will jump to the end of the textField.
来源:https://stackoverflow.com/questions/48790405/rxswift-rxcocoa-prevent-uitextfield-from-having-more-than-characters