我想使用RxSwift为textFiled中的字符设置限制,
也许我可以从Scan
运算符中受益,但在这种情况下我不知道如何使用它,
我希望得到的代码的行为与在shouldChangeCharacterInRage
方法中实现的行为相同:
func textField(_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String)
-> Bool {
if textField == baseTextFiled{
let enteredString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
if enteredString.count > limit{ // limit defined previously
return false
}
}
return true
}
有帮助吗?
答案 0 :(得分:0)
ReactiveX会推送数据,因此与该特定的委托方法并不真正兼容。也就是说,您仍然可以这样做,因为.rx.text
是控件属性...
baseTextField.rx.text.orEmpty // pushes text
.map { String($0.prefix(limit)) } // pushes first X characters in text
.distinctUntilChanged() // only pushes if text is different than previously
.bind(to: baseTextField.rx.text) // pushes text into text field
.disposed(by: bag)