2015-11-19 17 views
5

Ich lerne gerade RxSwift und habe ein einfaches Beispiel, dass ich nicht sicher bin, warum es nicht funktioniert. Ich habe ein Textfeld und ein Beschriftungsfeld. JEDES Mal, wenn sich das Textfeld ändert, möchte ich, dass das Beschriftungsfeld aktualisiert wird. Wenn ich das Textfeld eintippe, funktioniert alles wie erwartet. Wenn ich das Textfeld programmgesteuert einfüge, z. B. wenn ich eine Schaltfläche drücke und das Textfeld explizit festlege, wird das Beschriftungsfeld nicht aktualisiert.RxSwift - UILabel Feld wird nicht aktualisiert, wenn UITextField programmgesteuert aktualisiert wird

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

Wie bekomme ich das Etikettenfeld zu aktualisieren? Ich habe mir viele Beispiele angeschaut, aber ich kann keinen finden, der diese Frage beantwortet.

Antwort

16

Code Um dies zu ändern:

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

Da Text eine Eigenschaft ist, da kein Mechanismus zu wissen, ist, wenn es programmatisch geändert wird. Stattdessen verwendet RxCocoa Steuerelementereignisse, um zu wissen, wann sich der Wert geändert hat. Schauen Sie in UIControl + RxSwift.swift und Sie werden so etwas finden:

+0

Danke dafür! – Epaga

+0

Gibt es KVO richtig? –

Verwandte Themen