首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在RxSwift中每次更改UITextField text属性时获取信号

如何在RxSwift中每次更改UITextField text属性时获取信号
EN

Stack Overflow用户
提问于 2017-08-11 18:37:57
回答 4查看 14.4K关注 0票数 23

如何从以编程方式对UITextField文本属性进行更改中获得信号?通过使用rx.text,只有当用户通过键盘输入文本时才会报告信号。如果以编程方式设置textField.text,则信号不会触发。

这就是我使用rx.text的方式

代码语言:javascript
运行
复制
(self.phoneNumberTextField.rx.text).orEmpty.subscribe(onNext: { [weak self] (phone) in
         // do something
    }).addDisposableTo(disposeBag)
    self.phoneNumberTextField.text = "this is for test"

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2018-11-09 14:31:04

我也有同样的问题,显然sweeper的答案对我不起作用。因此,当我手动设置文本字段的文本时,我在文本字段上调用了sendActions方法

textField.text = "Programmatically set text." textField.sendActions(for: .valueChanged)

深入研究后,我意识到rx.text依赖于UIControlEvents,当您显式设置文本时,这些不会被触发。

希望这能有所帮助

票数 38
EN

Stack Overflow用户

发布于 2018-11-27 18:12:59

您可以在asObservable中添加controlEvents:

代码语言:javascript
运行
复制
    textField.rx.controlEvent([.editingChanged])
        .asObservable().subscribe({ [unowned self] _ in
            print("My text : \(self.textField.text ?? "")")
        }).disposed(by: bag)
票数 20
EN

Stack Overflow用户

发布于 2017-08-11 18:57:40

当你想观察键值观察兼容对象的属性时,只需调用observe

下面是一个例子

代码语言:javascript
运行
复制
textfield.rx.observe(String.self, "text").subscribe(onNext: { s in
    print(s ?? "nil")
}).disposed(by: disposeBag)

这将检测用户和您的代码对text所做的更改。

您不仅可以使用此技术来观察text,还可以观察具有键路径的任何其他属性!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45633173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档