当按钮更改其“ 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。
答案 0 :(得分:1)
没有一种做自己想要的事的好方法,坦率地说,尝试是错误的。出于某些原因,可以通过编程方式更改按钮的所选状态。不要尝试将模型状态存储在UI中,而应该让UI反映模型状态。
查看任何调用toggleSelected()
的内容。可以将其转换为rx,而您可以订阅它。