在 RxSwift 中设置 TextField 字符的限制 [重复]

Posted

技术标签:

【中文标题】在 RxSwift 中设置 TextField 字符的限制 [重复]【英文标题】:Set Limit for TextField characters in RxSwift [duplicate] 【发布时间】:2018-09-03 14:31:10 【问题描述】:

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

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)

【讨论】:

感谢 Daniel 的帮助,但您的解决方案只有在我删除 distinctUntilChanged() 时才有效

以上是关于在 RxSwift 中设置 TextField 字符的限制 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中设置 TextField 的宽度

在 TextField 中设置占位符的样式

java JavaFX - 在JavaFX TextField中设置提示(提示)int

以编程方式在 material-ui Autocomplete TextField 中设置值

如何在 JavaFX 中设置占位符?

如何在iText 5中设置字体系列?