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.
98 lines
2.7 KiB
98 lines
2.7 KiB
![]()
2 years ago
|
|
||
|
//
|
||
|
// 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)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|