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嗎? –