2016-05-01 11 views
4

Ich habe eine UIViewController mit 3 UITextField s. Jedes Mal, wenn eines der Felder den Fokus erhält, möchte ich einen neuen Textwert für eine obere Beschriftung festlegen. Was ist der beste Weg, dies mit RxSwift zu erreichen?RxSwift: Upgrade-Modell-Status, wenn Textfeld wird Fokus

+0

Um zu klären, ist es egal, welches Feld den Fokus erhalten hat? – solidcell

Antwort

8

Dies macht, was Sie suchen. Jedes Mal, wenn eine UITextField eine textFieldDidBeginEditing: Delegiertenmitteilung sendet, erhalten Sie stattdessen eine Observable dafür. Dann ordnen Sie das Observable in der richtigen Zeichenfolge für das Textfeld zu. Kombinieren Sie dann alle drei dieser Observablen in nur einer, wobei das letzte Ereignis aus dem Textfeld stammt, das zuletzt diese Delegatennachricht aufgerufen hat. Dann binden Sie diesen Wert an den Text des Tooltips.

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

danke, @solidcell! Genau das habe ich gesucht! – alexxjk

Verwandte Themen