带有 UITextFieldDelegate 的 RxSwift 控制事件
Posted
技术标签:
【中文标题】带有 UITextFieldDelegate 的 RxSwift 控制事件【英文标题】:RxSwift Control Event with UITextFieldDelegate 【发布时间】:2020-03-13 11:13:59 【问题描述】:我在一个项目中使用 RxSwift。我正在使用控件事件来处理文本字段事件,如下所示。
textField.rx.controlEvent([.editingDidEndOnExit]).subscribe _ in .disposed(by: disposeBag)
现在我需要处理一个委托方法
textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
如果我将委托添加到 textField,controlEvents 将停止工作。
有没有人建议我如何处理这种情况,我可以同时使用控制事件和委托方法?
或者我应该删除这些处理中的任何一个。
谢谢。
【问题讨论】:
你能检查一下这个链接吗 - ***.com/a/51814368/3683408?也许它会帮助你。 【参考方案1】:editingDidEndOnExit
控制事件停止工作,因为委托正在更改返回键的行为。将textFieldShouldReturn(_:)
添加到您的委托并让它返回true
,然后controlEvent 将按预期工作。
extension ExampleViewController: UITextFieldDelegate
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
// can only enter numbers with this. An example of the sort of thing you
// might want to put in this method.
return string.isEmpty || string.allSatisfy !$0.unicodeScalars.contains !NSCharacterSet.decimalDigits.contains($0)
// this method must exist. If you don't add a delegate to your text field,
// the default behavior is as if this returned true. If you add a delegate,
// then the field's default behavior changes to false and you have to
// implement this method to get it to return true again.
func textFieldShouldReturn(_ textField: UITextField) -> Bool
return true
【讨论】:
是的,您的回答确实是正确的。对我帮助很大。以上是关于带有 UITextFieldDelegate 的 RxSwift 控制事件的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中创建 UITextFieldDelegate 以限制字符数
我正在寻找 UITextFieldDelegate 示例代码 [关闭]
UITextFieldDelegate:如何选择为每个单独的 TextField 调用哪些方法
UITextFieldDelegate 崩溃 (exc_bad_access)