// // PickerViewAdapter.swift // Lookfit // // Created by lemo. on 2020/6/7. // Copyright © 2020 Sheldon. All rights reserved. // import Foundation class DoublePickerViewViewAdapter : NSObject , UIPickerViewDataSource , UIPickerViewDelegate , RxPickerViewDataSourceType , SectionedViewDataSourceType { typealias Element = [[String]] private var items: [[String]] = [] func model(at indexPath: IndexPath) throws -> Any { return items[indexPath.section][indexPath.row] } func numberOfComponents(in pickerView: UIPickerView) -> Int { return items.count } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return items[component].count } func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat { return kScaleHeight(48) } func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { let label = UILabel() label.text = items[component][row] label.font = SystemMediumFont(27) label.textAlignment = .center return label } func pickerView(_ pickerView: UIPickerView, observedEvent: Event<[[String]]>) { Binder(self) { (adapter, items) in adapter.items = items pickerView.reloadAllComponents() }.on(observedEvent) } } class SinglePickerViewViewAdapter : NSObject , UIPickerViewDataSource , UIPickerViewDelegate , RxPickerViewDataSourceType , SectionedViewDataSourceType { typealias Element = [String] private var items: [String] = [] func model(at indexPath: IndexPath) throws -> Any { return items[indexPath.row] } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return items.count } func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat { return kScaleHeight(48) } func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { let label = UILabel() label.text = items[row] label.textAlignment = .center label.font = SystemMediumFont(27) label.textAlignment = .center return label } func pickerView(_ pickerView: UIPickerView, observedEvent: Event<[String]>) { Binder(self) { (adapter, items) in adapter.items = items pickerView.reloadAllComponents() }.on(observedEvent) } }