RxSwift:当文本字段获得焦点时升级模型状态
RxSwift: upgrade model state when textfield gets focus
我有一个 UIViewController
有 3 个 UITextField
。每当其中一个字段获得焦点时,我想为上面的提示标签设置一个新的文本值。使用 RxSwift
实现此目标的最佳方法是什么?
这就是您要查找的内容。任何时候 UITextField
将发送 textFieldDidBeginEditing:
委托消息,您都会收到 Observable
。然后将 Observable
映射到该文本字段的正确字符串中。然后将所有 3 个 Observables 组合成一个,其中最新事件来自最近调用该委托消息的文本字段。然后将该值绑定到工具提示的文本。
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)
}
}
我有一个 UIViewController
有 3 个 UITextField
。每当其中一个字段获得焦点时,我想为上面的提示标签设置一个新的文本值。使用 RxSwift
实现此目标的最佳方法是什么?
这就是您要查找的内容。任何时候 UITextField
将发送 textFieldDidBeginEditing:
委托消息,您都会收到 Observable
。然后将 Observable
映射到该文本字段的正确字符串中。然后将所有 3 个 Observables 组合成一个,其中最新事件来自最近调用该委托消息的文本字段。然后将该值绑定到工具提示的文本。
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)
}
}