ios - 如何使用RxSwift实现视图是否被按钮的点击状态隐藏(isSelected)
问题描述
我想在选择按钮时隐藏视图并在取消选择按钮时显示视图,我该如何使用 RxSwift?
解决方案
当我创建一个自定义控件时,一个复选框UIButton
,我实际上很难观察该isSelected
属性。但这里有一个简单的方法:
子类化
UIButton
(这是可选的,但是通过这种方式,您可以在控制器中获得更短的行)。在您的自定义按钮中,订阅它自己的
.rx.tap
.BehaviorRelay
在你的isSelectedBinder
按钮上有一个跟注。最后,您现在可以将
isSelectedBinder
实例化按钮的按钮绑定到.rx.isHidden
任何视图的按钮。
控制器
class ViewController: UIViewController {
@IBOutlet weak var button: MyButton!
@IBOutlet weak var someView: UIView!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
self.button.isSelectedBinder
.bind(to: self.someView.rx.isHidden)
.disposed(by: disposeBag)
}
}
按钮
class MyButton: UIButton {
var isSelectedBinder = BehaviorRelay<Bool>(value: true)
let disposeBag = DisposeBag()
override func awakeFromNib() {
super.awakeFromNib()
weak var weakSelf = self
self.rx.tap.subscribe { _ in
print("TAP")
guard let strongSelf = weakSelf else { return }
strongSelf.isSelectedBinder.accept(!strongSelf.isSelectedBinder.value)
}.disposed(by: self.disposeBag)
}
}
推荐阅读
- android - 如何从 Android Studio 中的 APK buld 中排除默认资源?
- javascript - Facebook Messenger Chat - CustomerChat 插件不再是主要 Facebook SDK 的一部分
- mocha.js - 用 mocha-chai-sinon 测试去抖动
- django - DRF - 如何在查询集上实现基于对象的权限?
- html - 如何垂直居中浮动元素的高度百分比?
- php - 为什么表格的最后一列开始在表格外打印
- windows - 以不同的用户身份运行命令(从命令行)
- mysql - 本地主机连接但数据库未与 Wamp 连接
- angular - Ionic 4 - 平板电脑上的点击与触摸启动(点击/移动配置问题)
- loops - 将多次出现的 id 发送到 jmeter 中的请求