2015-11-19 108 views
5

我刚刚学习RxSwift,并且有一个简单的示例,我不确定它为什么不起作用。我有一个文本字段和一个标签字段。任何时候文本字段发生变化时,我都希望标签字段得到更新。如果我输入文本字段,一切都按预期工作。如果以编程方式设置文本字段,例如当我按下按钮并显式设置文本字段时,标签字段不会更新。RxSwift - UITextField以编程方式更新时未更新UILabel字段

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" 
    } 
} 

如何获取标签字段以更新?我看了很多例子,但似乎找不到能回答这个问题的例子。

回答

16

你的代码改成这样:

@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())) 
} 
+0

感谢您的支持! – Epaga

+0

有KVO吗? –