RxInfinitePicker
RxInfinitePicker
是一个基于 RxSwift 的 iOS 无限选择器,它可以帮助您使用自定义单元格创建无限选择器。使用 RxInfinitePicker
需要 RxSwift
的基础知识 (https://github.com/ReactiveX/RxSwift)。
示例
要运行示例项目,请克隆存储库,然后从 Example 目录运行 pod install
文档
RxInfinitePicker 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'RxInfinitePicker'
自定义单元格
以下代码是自定义单元格的演示。自定义单元格类 NumberPickerCell
是泛型类 RxInfinitePickerCell 的子类。这里的模型类型是 Int
。
class NumberPickerCell: RxInfinitePickerCell<Int> {
private lazy var numberLabel: UILabel = {
let label = UILabel()
label.textColor = .white
label.textAlignment = .center
label.font = UIFont.systemFont(ofSize: 23, weight: .bold)
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(containerView)
createConstraints()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override var model: Int? {
didSet {
guard let number = model else {
return
}
numberLabel.text = String(number)
}
}
// ...
}
使用 RxInfinitePicker
在您的视图控制器类中创建一个选择器。其泛型类型必须与您的自定义类中的类型相同。
private lazy var numberPicker: RxInfinitePicker<Int> = {
let picker = RxInfinitePicker<Int>(
itemSize: CGSize(width: 50, height: 50),
scrollDirection: .vertical,
cellType: NumberPickerCell.self
)
picker.itemSelected.subscribe(onNext: { [unowned self] in
print("itemSelected \($0)")
}).disposed(by: disposeBag)
return picker
}()
将数据绑定到选择器。
override func viewDidLoad() {
super.viewDidLoad()
//...
viewModel.items.bind(to: numberPicker.items).disposed(by: disposeBag)
}
在滚动或选择新项目后,包含所选模型的itemSelected
信号将被更新。
作者
lm2343635, [email protected]
许可
RxInfinitePicker采用MIT许可发布。更多信息请参阅LICENSE文件。