RxSwift:当textfield获得焦点时升级模型状态

时间:2016-05-01 16:10:54

标签: swift rx-swift

我有UIViewControllerUITextField个。每当其中一个字段获得焦点时,我想为上面的提示标签设置一个新的文本值。使用RxSwift实现此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:9)

这可以满足您的需求。只要UITextField发送textFieldDidBeginEditing:委托邮件,您就可以获得Observable。然后将Observable映射到该文本字段的正确字符串。然后将所有这三个Observable组合成一个,其中最新事件来自最近调用该委托消息的文本字段。然后将该值绑定到工具提示的文本。

import UIKit
import RxSwift
import RxCocoa

class ViewController: UIViewController {
    let disposeBag = DisposeBag()

    @IBOutlet weak var tooltip: UILabel!
    @IBOutlet weak var textField1: UITextField!
    @IBOutlet weak var textField2: UITextField!
    @IBOutlet weak var textField3: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        let textField1Text = textField1.rx_controlEvent(.EditingDidBegin)
            .map { "text field 1 message" }

        let textField2Text = textField2.rx_controlEvent(.EditingDidBegin)
            .map { "text field 2 message" }

        let textField3Text = textField3.rx_controlEvent(.EditingDidBegin)
            .map { "text field 3 message" }

        Observable.of(textField1Text, textField2Text, textField3Text).merge()
            .bindTo(tooltip.rx_text)
            .addDisposableTo(disposeBag)
    }
}