RxInfinitePicker 0.1

RxInfinitePicker 0.1

[Meng Li] 维护。



  • lm2343635

RxInfinitePicker

CI Status Version License Platform

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文件。