UIButton.isSelected不能Observable

时间:2017-04-04 08:23:22

标签: ios swift swift3 uibutton rx-swift

我想检查一些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无法工作。

3 个答案:

答案 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
})