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
4
A
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
Um zu klären, ist es egal, welches Feld den Fokus erhalten hat? – solidcell