// // SinglePickerCell.swift // Lookfit // // 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: FunctionType? { didSet { loadFunctionType() } } var selectedItem: String? { didSet { selectItem() } } let titleLabel = UILabel().then { $0.textColor = Metric.textColor $0.font = Metric.textFont $0.textAlignment = .center } let pickerView = UIPickerView().then { _ in } typealias SinglePickerClosure = (String) -> Void var singlePickerClosure: SinglePickerClosure? let subject = PublishSubject() var viewModel = SinglePickerViewModel() override func makeUI() { super.makeUI() contentView.addSubview(titleLabel) contentView.addSubview(pickerView) } override func layoutSubviews() { super.layoutSubviews() titleLabel.snp.makeConstraints { (make) in make.top.equalToSuperview().offset(Metric.topspace) make.left.right.equalToSuperview() } pickerView.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!) { pickerView.selectRow(idx, inComponent: 0, animated: false) } } if let selectedItem = self.selectedItem { if let idx = viewModel.dataSourceVariable.value.firstIndex(of: selectedItem) { pickerView.selectRow(idx, inComponent: 0, animated: false) } }else { pickerView.selectRow(1, inComponent: 0, animated: false) } } func loadFunctionType() { viewModel = SinglePickerViewModel(funtionType: functionType!) viewModel.dataSourceVariable.asObservable() .bind(to: pickerView.rx.items(adapter: SinglePickerViewViewAdapter())) .disposed(by: cellDisposeBag) pickerView.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) } }