refactored picker base

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-10-03 15:29:02 -05:00
parent 6cd6685da4
commit 0a26abe391
12 changed files with 17 additions and 17 deletions

View File

@ -29,6 +29,7 @@ public protocol PickerViewable: UIPickerViewDataSource, UIPickerViewDelegate, Ha
associatedtype EnumType: RawRepresentable associatedtype EnumType: RawRepresentable
var items: [EnumType] { get set } var items: [EnumType] { get set }
var onPickerDidSelect: ((EnumType) -> Void)? { get set } var onPickerDidSelect: ((EnumType) -> Void)? { get set }
var scrollToBottom: (()->Void)? { get set }
} }
public class PickerSelectorView<EnumType: RawRepresentable>: UIStackView, PickerViewable { public class PickerSelectorView<EnumType: RawRepresentable>: UIStackView, PickerViewable {
@ -50,7 +51,7 @@ public class PickerSelectorView<EnumType: RawRepresentable>: UIStackView, Picker
didSet { selectedIndex = 0 } didSet { selectedIndex = 0 }
} }
public var onPickerDidSelect: ((EnumType) -> Void)? public var onPickerDidSelect: ((EnumType) -> Void)?
public var scrollToBottom: (()->Void)?
public init(title: String, picker: UIPickerView? = nil, items: [EnumType]) { public init(title: String, picker: UIPickerView? = nil, items: [EnumType]) {
self.picker = picker self.picker = picker
self.items = items self.items = items
@ -70,6 +71,7 @@ public class PickerSelectorView<EnumType: RawRepresentable>: UIStackView, Picker
self?.picker?.reloadAllComponents() self?.picker?.reloadAllComponents()
self?.picker?.selectRow(self?.selectedIndex ?? 0, inComponent: 0, animated: false) self?.picker?.selectRow(self?.selectedIndex ?? 0, inComponent: 0, animated: false)
self?.picker?.isHidden = false self?.picker?.isHidden = false
self?.scrollToBottom?()
}.store(in: &subscribers) }.store(in: &subscribers)
} }
@ -94,6 +96,7 @@ public class PickerSelectorView<EnumType: RawRepresentable>: UIStackView, Picker
guard row - 1 >= 0 else { return } guard row - 1 >= 0 else { return }
selectedIndex = row selectedIndex = row
onPickerDidSelect?(items[row-1]) onPickerDidSelect?(items[row-1])
text = "\(items[row-1].rawValue)"
pickerView.isHidden = true pickerView.isHidden = true
} }
} }

View File

@ -122,17 +122,14 @@ class BadgeViewController: ModelScrollViewController<DefaultBadgeModel> {
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.badge.surface = item self?.badge.surface = item
self?.contentTopView.backgroundColor = item.color self?.contentTopView.backgroundColor = item.color
self?.surfacePickerSelectorView.text = item.rawValue
} }
fillColorPickerSelectorView.onPickerDidSelect = { [weak self] item in fillColorPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.badge.fillColor = item self?.badge.fillColor = item
self?.fillColorPickerSelectorView.text = item.rawValue
} }
numberOfLinesPickerSelectorView.onPickerDidSelect = { [weak self] item in numberOfLinesPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.badge.numberOfLines = item.intValue self?.badge.numberOfLines = item.intValue
self?.numberOfLinesPickerSelectorView.text = item.rawValue
} }
} }
} }

View File

@ -112,18 +112,15 @@ class ButtonViewController: ModelScrollViewController<DefaultButtonModel> {
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.button.surface = item self?.button.surface = item
self?.contentTopView.backgroundColor = item.color self?.contentTopView.backgroundColor = item.color
self?.surfacePickerSelectorView.text = item.rawValue
} }
usePickerSelectorView.onPickerDidSelect = { [weak self] item in usePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.button.use = item self?.button.use = item
self?.button.backgroundColor = item.color self?.button.backgroundColor = item.color
self?.usePickerSelectorView.text = item.rawValue
} }
buttonSizePickerSelectorView.onPickerDidSelect = { [weak self] item in buttonSizePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.button.size = item self?.button.size = item
self?.buttonSizePickerSelectorView.text = item.rawValue
} }
} }
} }

View File

@ -119,7 +119,6 @@ class CheckboxGroupViewController: ModelScrollViewController<DefaultCheckboxGro
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.checkboxGroup.surface = item self?.checkboxGroup.surface = item
self?.contentTopView.backgroundColor = item.color self?.contentTopView.backgroundColor = item.color
self?.surfacePickerSelectorView.text = item.rawValue
} }
} }

View File

@ -116,7 +116,6 @@ class CheckboxViewController: ModelScrollViewController<DefaultCheckboxModel> {
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.checkbox.surface = item self?.checkbox.surface = item
self?.contentTopView.backgroundColor = item.color self?.contentTopView.backgroundColor = item.color
self?.surfacePickerSelectorView.text = item.rawValue
} }
} }
} }

View File

@ -127,7 +127,6 @@ class LabelViewController: ModelScrollViewController<DefaultLabelModel> {
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.label.surface = item self?.label.surface = item
self?.contentTopView.backgroundColor = item.color self?.contentTopView.backgroundColor = item.color
self?.surfacePickerSelectorView.text = item.rawValue
} }
textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in

View File

@ -27,6 +27,7 @@ class MenuViewController: UITableViewController {
MenuComponent(title: "RadioButtonGroup", viewController: RadioButtonViewController.self), MenuComponent(title: "RadioButtonGroup", viewController: RadioButtonViewController.self),
MenuComponent(title: "RadioBoxGroup", viewController: RadioBoxGroupViewController.self), MenuComponent(title: "RadioBoxGroup", viewController: RadioBoxGroupViewController.self),
MenuComponent(title: "RadioSwatchGroup", viewController: RadioSwatchGroupViewController.self), MenuComponent(title: "RadioSwatchGroup", viewController: RadioSwatchGroupViewController.self),
MenuComponent(title: "TextEntryField", viewController: TextEntryFieldViewController.self),
MenuComponent(title: "Toggle", viewController: ToggleViewController.self) MenuComponent(title: "Toggle", viewController: ToggleViewController.self)
] ]

View File

@ -71,6 +71,7 @@ public class ModelScrollViewController<ModelType: Modelable>: UIViewController,
initialSetupPerformed = true initialSetupPerformed = true
setupUpdateView() setupUpdateView()
setup() setup()
surfacePickerSelectorView.scrollToBottom = { [weak self] in self?.scrollToBottom()}
} }
} }
@ -80,6 +81,7 @@ public class ModelScrollViewController<ModelType: Modelable>: UIViewController,
public var picker: UIPickerView = { public var picker: UIPickerView = {
return UIPickerView().with { return UIPickerView().with {
$0.backgroundColor = .white
$0.translatesAutoresizingMaskIntoConstraints = false $0.translatesAutoresizingMaskIntoConstraints = false
} }
}() }()
@ -138,7 +140,7 @@ public class ModelScrollViewController<ModelType: Modelable>: UIViewController,
formStackView.topAnchor.constraint(equalTo: contentBottomView.topAnchor, constant: edgeSpacing).isActive = true formStackView.topAnchor.constraint(equalTo: contentBottomView.topAnchor, constant: edgeSpacing).isActive = true
formStackView.leadingAnchor.constraint(equalTo: contentBottomView.leadingAnchor, constant: edgeSpacing).isActive = true formStackView.leadingAnchor.constraint(equalTo: contentBottomView.leadingAnchor, constant: edgeSpacing).isActive = true
formStackView.trailingAnchor.constraint(equalTo: contentBottomView.trailingAnchor, constant: -edgeSpacing).isActive = true formStackView.trailingAnchor.constraint(equalTo: contentBottomView.trailingAnchor, constant: -edgeSpacing).isActive = true
formStackView.bottomAnchor.constraint(equalTo: contentBottomView.bottomAnchor, constant: -150).isActive = true formStackView.bottomAnchor.constraint(equalTo: contentBottomView.bottomAnchor, constant: -100).isActive = true
view.addSubview(picker) view.addSubview(picker)
picker.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true picker.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
@ -149,6 +151,11 @@ public class ModelScrollViewController<ModelType: Modelable>: UIViewController,
private let scrollViewController = ScrollViewController() private let scrollViewController = ScrollViewController()
public func scrollToBottom() {
let bottomOffset = CGPoint(x: 0, y: scrollViewController.scrollView.contentSize.height - scrollViewController.scrollView.bounds.height + scrollViewController.scrollView.contentInset.bottom)
scrollViewController.scrollView.setContentOffset(bottomOffset, animated: true)
}
private func embed(_ viewController: UIViewController) { private func embed(_ viewController: UIViewController) {
addChild(viewController) addChild(viewController)
view.addSubview(viewController.view) view.addSubview(viewController.view)
@ -190,6 +197,10 @@ public class ModelScrollViewController<ModelType: Modelable>: UIViewController,
} else { } else {
formStackView.addArrangedSubview(formRow) formStackView.addArrangedSubview(formRow)
} }
if let pickerViewable = view as? any PickerViewable {
pickerViewable.scrollToBottom = { [weak self] in self?.scrollToBottom() }
}
} }
open func setup() {} open func setup() {}

View File

@ -130,7 +130,6 @@ class RadioBoxGroupViewController: ModelScrollViewController<DefaultRadioBoxGro
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.radioBoxGroup.surface = item self?.radioBoxGroup.surface = item
self?.contentTopView.backgroundColor = item.color self?.contentTopView.backgroundColor = item.color
self?.surfacePickerSelectorView.text = item.rawValue
} }
} }

View File

@ -126,7 +126,6 @@ class RadioButtonViewController: ModelScrollViewController<DefaultRadioButtonGr
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.radioButtonGroup.surface = item self?.radioButtonGroup.surface = item
self?.contentTopView.backgroundColor = item.color self?.contentTopView.backgroundColor = item.color
self?.surfacePickerSelectorView.text = item.rawValue
} }
} }

View File

@ -134,7 +134,6 @@ class RadioSwatchGroupViewController: ModelScrollViewController<DefaultRadioSwa
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.radioSwatchGroup.surface = item self?.radioSwatchGroup.surface = item
self?.contentTopView.backgroundColor = item.color self?.contentTopView.backgroundColor = item.color
self?.surfacePickerSelectorView.text = item.rawValue
} }
} }

View File

@ -113,17 +113,14 @@ class ToggleViewController: ModelScrollViewController<DefaultToggleModel> {
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.toggle.surface = item self?.toggle.surface = item
self?.contentTopView.backgroundColor = item.color self?.contentTopView.backgroundColor = item.color
self?.surfacePickerSelectorView.text = item.rawValue
} }
textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.toggle.fontSize = item self?.toggle.fontSize = item
self?.textSizePickerSelectorView.text = item.rawValue
} }
textPositionPickerSelectorView.onPickerDidSelect = { [weak self] item in textPositionPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.toggle.textPosition = item self?.toggle.textPosition = item
self?.textPositionPickerSelectorView.text = item.rawValue
} }
} }