当UITextField以编程方式更新时,RxSwift - UILabel字段未更新

时间:2015-11-19 22:18:03

标签: ios swift rx-swift

我只是在学习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 个答案:

答案 0 :(得分:20)

将您的代码更改为:

@IBAction func pBtn(sender: UIButton) {
  myTextField.text = "45"
  myTextField.sendActionsForControlEvents(.ValueChanged)
}

由于text是一个属性,因此没有一种机制可以知道它何时以编程方式更改。相反,RxCocoa使用控制事件来知道值何时发生了变化。看看UIControl + RxSwift.swift,你会发现这样的事情:

let controlTarget = ControlTarget(control: control, controlEvents: [.EditingChanged, .ValueChanged]) {
  control in
    observer.on(.Next(getter()))
}