// // SinglePickerCell.swift // FireBoltt // // Created by lemo on 2018/5/11. // Copyright © 2020年 ecell. All rights reserved. // import UIKit fileprivate struct Metric { static let textColor = kHexColor(0x2A2A2A) static let textFont = SystemLightFont(14) static let topspace = kScaleHeight(15.0) } class SinglePickerCell: TableViewCell { var functionType: FunctionTypeFireBoltt? { didSet { loadFunctionTypeFireBoltt() } } var selectedItem: String? { didSet { selectItem() } } let fbtitleLabel = UILabel().then { $0.textColor = Metric.textColor $0.font = Metric.textFont $0.textAlignment = .center } let fbpickerView = UIPickerView().then { _ in } typealias SinglePickerClosure = (String) -> Void var singlePickerClosure: SinglePickerClosure? let subject = PublishSubject() var viewModel = SinglePickerViewModels() override func makeUI() { super.makeUI() contentView.addSubview(fbtitleLabel) contentView.addSubview(fbpickerView) } override func layoutSubviews() { super.layoutSubviews() fbtitleLabel.snp.makeConstraints { (make) in make.top.equalToSuperview().offset(Metric.topspace) make.left.right.equalToSuperview() } fbpickerView.snp.makeConstraints { (make) in make.top.equalToSuperview().offset(kScaleHeight(20.0)) make.left.right.equalToSuperview() make.bottom.equalToSuperview().offset(-kScaleHeight(10.0)) } } } extension SinglePickerCell { func selectItem() { if selectedItem?.count == 1 { if let idx = viewModel.dataSourceVariable.value.firstIndex(of: selectedItem!) { fbpickerView.selectRow(idx, inComponent: 0, animated: false) } } if let selectedItem = self.selectedItem { if let idx = viewModel.dataSourceVariable.value.firstIndex(of: selectedItem) { fbpickerView.selectRow(idx, inComponent: 0, animated: false) } }else { fbpickerView.selectRow(1, inComponent: 0, animated: false) } } func loadFunctionTypeFireBoltt() { viewModel = SinglePickerViewModels(funtionType: functionType!) viewModel.dataSourceVariable.asObservable() .bind(to: fbpickerView.rx.items(adapter: SinglePickerViewViewAdapter())) .disposed(by: cellDisposeBag) fbpickerView.rx.modelSelected(String.self) .subscribe(onNext: { [weak self] item in guard let `self` = self else { return } if let singlePicker = self.singlePickerClosure { singlePicker(item.first!) } self.subject.onNext(item.first!) }) .disposed(by: cellDisposeBag) } }