我有一个自定义视图,在此自定义视图中,我声明了在点击该视图时将要切换的var isSelected: false
。
在我的ViewController中添加了两个自定义视图之后。
我需要的是:当我选择一个视图时,另一个视图立即被取消选择,因此只能同时选择一个。
我对此并不了解,但是我假设使用RxCocoa(或理想情况下为RxSwift),可以将每个视图的isSelected
变量设置为可观察的,然后在订阅中设置另一个一旦变为真,则一到虚假。
非常感谢您的帮助,在此先感谢您。
isSelected
布尔值不会更改状态。这就引出了一个问题,为什么其他代码监视您的视图的isSelected
布尔值而不是导致布尔值改变状态的事件呢?为什么是中间人?尤其是中间人,它是View系统而不是Model的一部分。 适当的解决方案是在模型中具有绑定到两个视图的Observable ...
更好的是这样:class CustomView: UIView {
var isSelected: Bool = false
}
class Example {
let viewA = CustomView()
let viewB = CustomView()
let disposeBag = DisposeBag()
func example(model: Observable<Bool>) {
disposeBag.insert(
model.bind(to: viewA.rx.isSelected),
model.map { !$0 }.bind(to: viewB.rx.isSelected)
)
}
}
extension Reactive where Base: CustomView {
var isSelected: Binder<Bool> {
Binder(base, binding: { view, isSelected in
view.isSelected = isSelected
})
}
}