订阅自定义UIView的变量

问题描述 投票:2回答:1

我有一个自定义视图,在此自定义视图中,我声明了在点击该视图时将要切换的var isSelected: false

在我的ViewController中添加了两个自定义视图之后。

我需要的是:当我选择一个视图时,另一个视图立即被取消选择,因此只能同时选择一个。

我对此并不了解,但是我假设使用RxCocoa(或理想情况下为RxSwift),可以将每个视图的isSelected变量设置为可观察的,然后在订阅中设置另一个一旦变为真,则一到虚假。

非常感谢您的帮助,在此先感谢您。

ios swift reactive-programming rx-swift rx-cocoa
1个回答
1
投票
make更改状态而编写代码,否则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 }) } }

© www.soinside.com 2019 - 2024. All rights reserved.