You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.7 KiB
97 lines
2.7 KiB
|
|
// |
|
// PickerViewAdapter.swift |
|
// FireBoltt |
|
// |
|
// 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) |
|
} |
|
} |
|
|
|
|
|
|