RxSwift - 当 UITextField 以编程方式更新时,UILabel 字段未更新
Posted
技术标签:
【中文标题】RxSwift - 当 UITextField 以编程方式更新时,UILabel 字段未更新【英文标题】:RxSwift - UILabel field not being updated when UITextField updated programmatically 【发布时间】:2015-11-19 22:18:03 【问题描述】:我刚刚学习 RxSwift 并且有一个简单的示例,我不确定它为什么不起作用。我有一个文本字段和一个标签字段。每当文本字段更改时,我都希望更新标签字段。如果我在文本字段中输入,一切都会按预期进行。如果我以编程方式设置文本字段,例如当我按下按钮并显式设置文本字段时,标签字段不会更新。
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController
@IBOutlet weak var myTextField: UITextField!
@IBOutlet weak var myLabel: UILabel!
override func viewDidLoad()
super.viewDidLoad()
myTextField.rx_text.bindTo(myLabel.rx_text)
@IBAction func pBtn(sender: UIButton)
myTextField.text = "45"
如何让标签字段更新?我查看了很多示例,但似乎找不到一个可以回答这个问题的示例。
【问题讨论】:
【参考方案1】:将您的代码更改为:
@IBAction func pBtn(sender: UIButton)
myTextField.text = "45"
myTextField.sendActionsForControlEvents(.ValueChanged)
由于文本是一种属性,因此没有一种机制可以知道何时以编程方式更改它。相反,RxCocoa 使用控制事件来知道值何时发生了变化。看看 UIControl+RxSwift.swift 你会发现这样的:
let controlTarget = ControlTarget(control: control, controlEvents: [.EditingChanged, .ValueChanged])
control in
observer.on(.Next(getter()))
【讨论】:
以上是关于RxSwift - 当 UITextField 以编程方式更新时,UILabel 字段未更新的主要内容,如果未能解决你的问题,请参考以下文章
UITextField 使用 RxSwift 绑定到 ViewModel
如何使用 RxSwift 观察 UITextField 中的文本变化?
根据 UITextField 中的值禁用按钮只能工作一次(RxSwift)
RxSwift 错误:属性“文本”要求“UITextField”继承自“UILabel”