【问题标题】:How to use RxSwift to implement the following logic with UITextfield?如何使用 RxSwift 通过 UITextfield 实现以下逻辑?
【发布时间】:2021-12-22 02:57:38
【问题描述】:

TextCode 在右侧有一个UItextField。 密码右侧有一个UItextField。

使用RxSwift实现如下逻辑。
SelectAlertItemAlertViewControll sheet style有A、B、C三个选项。现在我可以实现选择逻辑了。

我不知道如何使用 RxSwift 来实现以下逻辑。
以下是我的关键逻辑:只有当 selectedItem 为 B.TextCodeTextField 文本必须在编辑结束时复制到 PassCodeTextField。

也就是说SelectType为B,TextCodeTextField输入“11111”编辑结束,那么PassCodeTextField为“11111”。

如何使用 RxSwift 和 UITextfield 实现以下逻辑?

【问题讨论】:

    标签: rx-swift


    【解决方案1】:

    以下是使用我的原因逻辑效果架构(带注释)的方法:

    
    import Cause_Logic_Effect
    import RxCocoa
    import RxSwift
    import UIKit
    
    final class ViewController: UIViewController {
        var textCodeField: UITextField!
        var selectTypeAction: UIButton!
        var selectTypeLabel: UILabel!
        var passCodeField: UITextField!
        let disposeBag = DisposeBag()
    }
    
    extension ViewController {
        func connect() {
            // when user taps the selectTypeAction, display an action sheet alert to
            // get the selection type from the user.
            let selectType = selectTypeAction.rx.tap
                .flatMapFirst(
                    presentScene(animated: true, over: selectTypeAction, scene: {
                        UIAlertController(
                            title: nil,
                            message: "Select Item:",
                            preferredStyle: .actionSheet
                        )
                            .scene { $0.connectChoice(choices: ["A", "B", "C"]) }
                    })
                )
                .share()
    
            // when the user selects "B" grab the last value entered in the
            // textCodeField and push it to the passCodeField
            selectType
                .compactMap { $0 }
                .filter { $0 == "B" }
                .withLatestFrom(textCodeField.rx.text)
                .bind(to: passCodeField.rx.text)
                .disposed(by: disposeBag)
    
            // when the user selects a value push the value to the selectTypeLabel
            selectType
                .bind(to: selectTypeLabel.rx.text)
                .disposed(by: disposeBag)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多