2016-05-01 19 views
4

UIViewControllerには3 UITextFieldがあります。いずれかのフィールドにフォーカスが移るたびに、上記のヒントラベルの新しいテキスト値を設定します。 RxSwiftでこれを達成する最良の方法は何ですか?RxSwift:テキストフィールドがフォーカスを取得したときのモデル状態をアップグレードします

+0

明確にするために、フォーカスを受け取ったフィールドは問題ではありませんか? – solidcell

答えて

8

これはあなたが探しているものです。 UITextFieldtextFieldDidBeginEditing:デリゲートメッセージを送信するたびに、その代わりにObservableを取得します。次に、そのテキストフィールドの正しい文字列にそのObservableをマッピングします。その後、Observableの3つすべてを1つにまとめます。最新のイベントは、最後にそのデリゲートメッセージを呼び出したテキストフィールドからのものです。次に、その値をツールチップのテキストにバインドします。

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) 
    } 
} 
+1

ありがとう、@solidcell!それはまさに私が探していたものです! – alexxjk

関連する問題