在RxSwift中设置TextField字符的限制

时间:2018-09-03 14:31:11

标签: rx-swift

我想使用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
    }

有帮助吗?

1 个答案:

答案 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)