2015-11-19 17 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の権利はありますか? –

関連する問題