我想检查一些UIButtons的isSelected状态,以便为另一个按钮的isEnabled状态提供信息。我希望仅当其中一个按钮isSelected状态设置为true时才启用后一个按钮。 但是我看到你选择仅将isSelected属性保存为Observer。
@IBAction func checkBoxButtonTaped(sender: UIButton) {
sender.rx.isSelected.onNext(!sender.isSelected)
}
或者
@IBAction func checkBoxButtonTaped(sender: UIButton) {
sender.isSelected = !sender.isSelected
}
可观察代码:
let state = Observable.just(true)
state.bindTo(checkBoxButton.rx.isSelected)
.disposed(by: disposeBag)
state.bindTo(loginButton.rx.isEnabled)
.disposed(by: disposeBag)
通过两个代码片段,Observable无法工作。
答案 0 :(得分:1)
或者您可以简单地使用扫描:
checkBoxButton.rx.tap
.scan(false) { lastValue, _ in
return !lastValue
}
.bind(to: loginButton.rx.isEnabled)
.disposed(by: disposeBag)
Here是有关扫描方式的更详细说明。
答案 1 :(得分:0)
为什么不选择要设置为启用/禁用的另一个按钮的插座。并在目标按钮操作中设置启用属性,如
@IBAction func checkBoxButtonTaped(sender: UIButton) {
sender.isSelected = !sender.isSelected
btnTarget.enabled = sender.isSelected
}
答案 2 :(得分:-1)
我找到了一种解决方法Variable
:
let checkBoxValid = Variable(true)
_ = checkBoxValid.asObservable().bindTo(checkBoxButton.rx.isSelected)
_ = checkBoxButton.rx.tap.subscribe(onNext: {
checkBoxValid.value = !checkBoxValid.value
})