2015-11-19 23 views
5

Tôi chỉ đang học RxSwift và có một ví dụ đơn giản là tôi không chắc tại sao nó không hoạt động. Tôi có một trường văn bản và một trường nhãn. BẤT K time thời gian trường văn bản thay đổi, tôi muốn trường nhãn được cập nhật. Nếu tôi nhập vào trường văn bản, mọi thứ sẽ hoạt động như mong đợi. Nếu tôi đặt trường văn bản theo chương trình, chẳng hạn như khi tôi nhấn một nút và đặt trường văn bản một cách rõ ràng, trường nhãn sẽ không được cập nhật.Trường RxSwift - UILabel không được cập nhật khi UITextField cập nhật theo chương trình

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

Làm cách nào để có trường nhãn để cập nhật? Tôi đã xem xét rất nhiều ví dụ nhưng dường như không thể tìm thấy một ví dụ nào trả lời câu hỏi này.

Trả lời

16

Thay đổi mã của bạn như thế này:

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

Kể từ khi văn bản là một tài sản, không có một cơ chế để biết khi nào nó được thay đổi theo chương trình. Thay vào đó, RxCocoa sử dụng các sự kiện kiểm soát để biết khi nào giá trị đã thay đổi. Có một cái nhìn trong UIControl + RxSwift.swift và bạn sẽ tìm thấy một cái gì đó như thế này:

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

Cảm ơn vì điều này! – Epaga

+0

Có KVO đúng không? –

Các vấn đề liên quan