首页 > 解决方案 > 如何使用RxSwift实现视图是否被按钮的点击状态隐藏(isSelected)

问题描述

我想在选择按钮时隐藏视图并在取消选择按钮时显示视图,我该如何使用 RxSwift?

标签: ios

解决方案


当我创建一个自定义控件时,一个复选框UIButton,我实际上很难观察该isSelected属性。但这里有一个简单的方法:

  1. 子类化UIButton(这是可选的,但是通过这种方式,您可以在控制器中获得更短的行)。

  2. 在您的自定义按钮中,订阅它自己的.rx.tap.

  3. BehaviorRelay在你的isSelectedBinder按钮上有一个跟注。

  4. 最后,您现在可以将isSelectedBinder实例化按钮的按钮绑定到.rx.isHidden任何视图的按钮。

控制器

class ViewController: UIViewController {

    @IBOutlet weak var button: MyButton!
    @IBOutlet weak var someView: UIView!

    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.button.isSelectedBinder
            .bind(to: self.someView.rx.isHidden)
            .disposed(by: disposeBag)
    }
}

按钮

class MyButton: UIButton {
    var isSelectedBinder = BehaviorRelay<Bool>(value: true)
    let disposeBag = DisposeBag()

    override func awakeFromNib() {
        super.awakeFromNib()

        weak var weakSelf = self

        self.rx.tap.subscribe { _ in
            print("TAP")
            guard let strongSelf = weakSelf else { return }
            strongSelf.isSelectedBinder.accept(!strongSelf.isSelectedBinder.value)
            }.disposed(by: self.disposeBag)
    }
}

推荐阅读