How do you get a signal every time a UITextField text property changes in RxSwift

前端 未结 4 1848
挽巷
挽巷 2021-02-18 23:36

How do you get a signal from programmatically made changes to UITextField text property? By using rx.text only reports a signal when the user input the text by keyboard. If you

相关标签:
4条回答
  • 2021-02-18 23:46

    You can add controlEvents to asObservable:

        textField.rx.controlEvent([.editingChanged])
            .asObservable().subscribe({ [unowned self] _ in
                print("My text : \(self.textField.text ?? "")")
            }).disposed(by: bag)
    
    0 讨论(0)
  • 2021-02-18 23:50

    If u are setting textfield.text programmatically then you can perform any actions over there. You don't need the subscription block.

    As textfield is in inactive state your textfield.text subscription won't get called, rather u have to observe the textfield text.

    Use bindings for text changes will solve your problem.

    let textChange = Variable(true)
    _ = textChange.asObservable().bindTo(textfield.rx.text)
    
    0 讨论(0)
  • 2021-02-19 00:03

    When you wish to observe a property of key-value observing compatible object, just call observe!

    Here is an example

    textfield.rx.observe(String.self, "text").subscribe(onNext: { s in
        print(s ?? "nil")
    }).disposed(by: disposeBag)
    

    This will detect changes to text that are made by both the user and your code.

    You can use this technique to not just observe text, but also any other property that has a key path!

    0 讨论(0)
  • 2021-02-19 00:10

    I had the same issues, apparently sweeper's answer did not work for me. So here is what I did When I set the text for textfield manually, I call sendActions method on the text field

    textField.text = "Programmatically set text." textField.sendActions(for: .valueChanged)

    On digging a little bit more, I realized that the rx.text depends on UIControlEvents and these are not triggered when you explicitly set the text.

    Hope this helps

    0 讨论(0)
提交回复
热议问题