RxSwift - 当 UITextField 以编程方式更新时,UILabel 字段未更新
RxSwift - UILabel field not being updated when UITextField updated programmatically
我刚开始学习 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"
}
}
如何更新标签字段?我看了很多例子,但似乎找不到能回答这个问题的例子。
将您的代码更改为:
@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,有一个简单的例子,我不确定它为什么不工作。我有一个文本字段和一个标签字段。每当文本字段发生变化时,我都希望更新标签字段。如果我在文本字段中键入,一切都会按预期进行。如果我以编程方式设置文本字段,例如当我按下按钮并明确设置文本字段时,标签字段不会更新。
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"
}
}
如何更新标签字段?我看了很多例子,但似乎找不到能回答这个问题的例子。
将您的代码更改为:
@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()))
}