我试图在按钮更改其“isSelected”状态时收到通知。
我有一个UIButton设置,目标是更改他的isSelected:

let button = UIButton()
button.addTarget(button, action: #selector(toggleSelected), for: .touchUpInside)
....
@objc func toggleSelected() {
    self.isSelected = !self.isSelected
}

而且我想要像button.rx.isSelectedChanged这样的东西可以订阅事件。

我试图用ControlProperty扩展UIButton.rx:
extension Reactive where Base: UIButton {

    public var isSelectedChanged: ControlProperty<Bool> {
        return base.rx.controlProperty(
            editingEvents:  [.allEditingEvents, .valueChanged],
            getter: { $0.isSelected },
            setter: { $0.isSelected = $1 })
    }

}

和类似的东西:
button.rx.observe(Bool.self, "isSelected")
    .takeUntil(button.rx.deallocated)
    .subscribe(onNext: { print("selcted \($0)") })

但是我都没有button.isSelected更新。

什么是这样做的好方法?

编辑:
在@ daniel-t回复之后,我实现了here

最佳答案

坦率地说,没有好的方法来做,尝试是错误的。由于某种原因,通过编程方式更改了按钮的选定状态。不要尝试将模型状态存储在UI中,而应让UI反映模型状态。

看什么叫toggleSelected()。可能可以将其转换为rx,而您可以订阅它。

关于ios - 如何使用RxSwift订阅UIButton isSelected更改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54198557/

10-11 19:47