2015-11-19 7 views
5

Sadece RxSwift'i öğreniyorum ve neden çalışmadığından emin olmadığımı gösteren basit bir örneğim var. Bir metin alanım ve bir etiket alanım var. Metin alanı değiştiğinde, etiket alanının güncellenmesini istiyorum. Metin alanına yazdığımda her şey beklendiği gibi çalışır. Metin alanını programlı olarak ayarladığımda, örneğin bir düğmeye bastığımda ve metin alanını açıkça ayarladığımda, etiket alanı güncellenmez.RxSwift - UILabel alanı, UITextField program aracılığıyla güncellendiğinde güncellenmiyor

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

Etiket alanını güncelleştirmek için nasıl alabilirim? Çok sayıda örneğe baktım ama bu soruyu cevaplayan bir tane bulamıyorum.

cevap

16
bu kodunuzu değiştirin

: Metin bir özelliktir

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

yana, programlı değiştiğinde bilmek bir mekanizma yoktur. Bunun yerine, RxCocoa, değerin ne zaman değiştiğini öğrenmek için kontrol olaylarını kullanır. UIControl + RxSwift.swift'e bir göz atın ve şu gibi bir şey bulacaksınız:

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

Bunun için teşekkürler! – Epaga

+0

KVO hakkı var mı? –