refactored picker logic

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-09-30 09:45:03 -05:00
parent b760d32e4b
commit 5337f30843
10 changed files with 197 additions and 425 deletions

View File

@ -8,20 +8,73 @@
import Foundation import Foundation
import UIKit import UIKit
import VDS import VDS
import Combine
protocol PickerViewable { public struct PickerType : RawRepresentable, Equatable, Hashable {
public var rawValue: String
public init(_ rawValue: String) {
self.rawValue = rawValue
}
public init(rawValue: String) {
self.rawValue = rawValue
}
public static var surface = PickerType(rawValue: "surface")
public static var textPosition = PickerType(rawValue: "textPosition")
public static var textSize = PickerType(rawValue: "textSize")
public static var fontCategory = PickerType(rawValue: "fontCategory")
}
protocol PickerViewable: UIPickerViewDataSource, UIPickerViewDelegate, Hashable {
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 }
} }
class PickerBase<EnumType: RawRepresentable>: NSObject, PickerViewable, UIPickerViewDataSource, UIPickerViewDelegate { class PickerSelectorView<EnumType: RawRepresentable>: UIStackView, PickerViewable {
var items: [EnumType] private weak var picker: UIPickerView?
fileprivate var selectedIndex = 0
private var subscribers = Set<AnyCancellable>()
private var label = UILabel()
private var button = UIButton(type: .system).with { instance in
instance.configuration = .filled()
instance.setTitle("Select", for: .normal)
}
var text: String = "" {
didSet {
label.text = text
}
}
var items: [EnumType] {
didSet { selectedIndex = 0 }
}
var onPickerDidSelect: ((EnumType) -> Void)? var onPickerDidSelect: ((EnumType) -> Void)?
init(items: [EnumType]) { init(title: String, picker: UIPickerView? = nil, items: [EnumType]) {
self.picker = picker
self.items = items self.items = items
super.init() super.init(frame: .zero)
self.axis = .horizontal
self.distribution = .fillEqually
self.alignment = .fill
label.text = title
addArrangedSubview(label)
addArrangedSubview(button)
button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.picker?.delegate = self
self?.picker?.dataSource = self
self?.picker?.reloadAllComponents()
self?.picker?.selectRow(self?.selectedIndex ?? 0, inComponent: 0, animated: false)
self?.picker?.isHidden = false
}.store(in: &subscribers)
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} }
func numberOfComponents(in pickerView: UIPickerView) -> Int { func numberOfComponents(in pickerView: UIPickerView) -> Int {
@ -39,32 +92,15 @@ class PickerBase<EnumType: RawRepresentable>: NSObject, PickerViewable, UIPicker
func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
guard row - 1 >= 0 else { return } guard row - 1 >= 0 else { return }
selectedIndex = row
onPickerDidSelect?(items[row-1]) onPickerDidSelect?(items[row-1])
pickerView.isHidden = true pickerView.isHidden = true
} }
} }
class PickerSelectorView: UIStackView { class SurfacePickerSelectorView: PickerSelectorView<Surface>{
private var label = UILabel() init(picker: UIPickerView? = nil){
var button = UIButton(type: .system).with { instance in super.init(title: "light", picker: picker, items: [.light, .dark])
instance.configuration = .filled()
instance.setTitle("Select", for: .normal)
}
var text: String = "" {
didSet {
label.text = text
}
}
init(title: String){
super.init(frame: .zero)
self.axis = .horizontal
self.distribution = .fillEqually
self.alignment = .fill
label.text = title
addArrangedSubview(label)
addArrangedSubview(button)
} }
required init(coder: NSCoder) { required init(coder: NSCoder) {
@ -72,34 +108,32 @@ class PickerSelectorView: UIStackView {
} }
} }
class SurfacePicker: PickerBase<Surface> { class TextPositionPickerSelectorView: PickerSelectorView<TextPosition>{
init(){ init(picker: UIPickerView? = nil){
super.init(items: [.light, .dark]) super.init(title: "left", picker: picker, items: [.left, .right])
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} }
} }
class TextPositionPicker: PickerBase<TextPosition> { class TextSizePickerSelectorView: PickerSelectorView<TypographicalStyle.FontSize>{
init(){ init(title: String, picker: UIPickerView? = nil){
super.init(items: [.left, .right]) super.init(title: title, picker: picker, items: [.small, .large])
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} }
} }
class TextSizePicker: PickerBase<TypographicalStyle.FontSize> { class FontCategoryPickerSelectorView: PickerSelectorView<TypographicalStyle.FontCategory>{
init(){ init(title: String, picker: UIPickerView? = nil){
super.init(items: [.small, .large]) super.init(title: title, picker: picker, items: TypographicalStyle.FontCategory.allCases)
}
required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} }
} }
class FontCategoryPicker: PickerBase<TypographicalStyle.FontCategory> {
init(){
super.init(items: TypographicalStyle.FontCategory.allCases)
}
}
class UsePicker: PickerBase<Use> {
init(){
super.init(items: [.primary, .secondary])
}
}

View File

@ -13,10 +13,6 @@ import Combine
class BadgeViewController: ModelScrollViewController<DefaultBadgeModel> { class BadgeViewController: ModelScrollViewController<DefaultBadgeModel> {
enum PickerType {
case surface, fillColor, numberOfLines
}
enum NumberOfLines: String, CaseIterable { enum NumberOfLines: String, CaseIterable {
case unlimited case unlimited
case one case one
@ -41,9 +37,22 @@ class BadgeViewController: ModelScrollViewController<DefaultBadgeModel> {
} }
} }
var fillColorPickerSelectorView = PickerSelectorView(title: "red") lazy var fillColorPickerSelectorView = {
var numberOfLinesPickerSelectorView = PickerSelectorView(title: "one") PickerSelectorView(title: "red",
var surfacePickerSelectorView = PickerSelectorView(title: "light") picker: self.picker,
items: BadgeFillColor.allCases)
}()
lazy var numberOfLinesPickerSelectorView = {
PickerSelectorView(title: "one",
picker: self.picker,
items: NumberOfLines.allCases)
}()
lazy var surfacePickerSelectorView = {
SurfacePickerSelectorView(picker: self.picker)
}()
var textField = TextField() var textField = TextField()
var maxWidthTextField = TextField() var maxWidthTextField = TextField()
var badge = Badge() var badge = Badge()
@ -85,25 +94,6 @@ class BadgeViewController: ModelScrollViewController<DefaultBadgeModel> {
} }
self?.badge.maxWidth = float self?.badge.maxWidth = float
}.store(in: &subscribers) }.store(in: &subscribers)
surfacePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .surface
}.store(in: &subscribers)
fillColorPickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .fillColor
}.store(in: &subscribers)
numberOfLinesPickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .numberOfLines
}.store(in: &subscribers)
} }
func setupModel() { func setupModel() {
@ -131,48 +121,22 @@ class BadgeViewController: ModelScrollViewController<DefaultBadgeModel> {
badge.set(with: viewModel) badge.set(with: viewModel)
} }
//Picker
var surfacePicker = SurfacePicker()
var fillColorPicker = PickerBase<BadgeFillColor>.init(items: BadgeFillColor.allCases)
var numberOfLinesPicker = PickerBase<NumberOfLines>.init(items: NumberOfLines.allCases)
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
case .fillColor:
update(object: fillColorPicker)
case .numberOfLines:
update(object: numberOfLinesPicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
func setupPicker(){ func setupPicker(){
surfacePicker.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 self?.surfacePickerSelectorView.text = item.rawValue
} }
fillColorPicker.onPickerDidSelect = { [weak self] item in fillColorPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.badge.fillColor = item self?.badge.fillColor = item
self?.fillColorPickerSelectorView.text = item.rawValue self?.fillColorPickerSelectorView.text = item.rawValue
} }
numberOfLinesPicker.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 self?.numberOfLinesPickerSelectorView.text = item.rawValue
} }
} }
} }

View File

@ -12,12 +12,21 @@ import VDSColorTokens
class ButtonViewController: ModelScrollViewController<DefaultButtonModel> { class ButtonViewController: ModelScrollViewController<DefaultButtonModel> {
enum PickerType { lazy var surfacePickerSelectorView = {
case surface, use, buttonSize SurfacePickerSelectorView(picker: self.picker)
} }()
var surfacePickerSelectorView = PickerSelectorView(title: "")
var usePickerSelectorView = PickerSelectorView(title: "") lazy var usePickerSelectorView = {
var buttonSizePickerSelectorView = PickerSelectorView(title: "") PickerSelectorView<Use>(title: "",
picker: self.picker,
items: [.primary, .secondary])
}()
lazy var buttonSizePickerSelectorView = {
PickerSelectorView(title: "",
picker: self.picker,
items: ButtonSize.allCases)
}()
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var textField = TextField() var textField = TextField()
@ -55,18 +64,6 @@ class ButtonViewController: ModelScrollViewController<DefaultButtonModel> {
self?.button.disabled = sender.isOn self?.button.disabled = sender.isOn
}.store(in: &subscribers) }.store(in: &subscribers)
surfacePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .surface
}.store(in: &subscribers)
usePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .use
}.store(in: &subscribers)
textField textField
.textPublisher .textPublisher
.sink { [weak self] text in .sink { [weak self] text in
@ -81,12 +78,6 @@ class ButtonViewController: ModelScrollViewController<DefaultButtonModel> {
} }
}.store(in: &subscribers) }.store(in: &subscribers)
buttonSizePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .buttonSize
}.store(in: &subscribers)
} }
func setupModel() { func setupModel() {
@ -120,46 +111,21 @@ class ButtonViewController: ModelScrollViewController<DefaultButtonModel> {
button.set(with: viewModel) button.set(with: viewModel)
} }
//Picker
var surfacePicker = SurfacePicker()
var usePicker = UsePicker()
var buttonSizePicker = PickerBase<ButtonSize>.init(items: ButtonSize.allCases)
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
case .use:
update(object: usePicker)
case .buttonSize:
update(object: buttonSizePicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
func setupPicker(){ func setupPicker(){
surfacePicker.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 self?.surfacePickerSelectorView.text = item.rawValue
} }
usePicker.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 self?.usePickerSelectorView.text = item.rawValue
} }
buttonSizePicker.onPickerDidSelect = { [weak self] item in buttonSizePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.button.size = item self?.button.size = item
self?.buttonSizePickerSelectorView.text = item.rawValue self?.buttonSizePickerSelectorView.text = item.rawValue
} }

View File

@ -13,11 +13,10 @@ import Combine
class CheckboxGroupViewController: ModelScrollViewController<DefaultCheckboxGroupModel> { class CheckboxGroupViewController: ModelScrollViewController<DefaultCheckboxGroupModel> {
enum PickerType { lazy var surfacePickerSelectorView = {
case surface SurfacePickerSelectorView(picker: self.picker)
} }()
var surfacePickerSelectorView = PickerSelectorView(title: "light")
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var labelTextField = TextField() var labelTextField = TextField()
var childTextField = TextField() var childTextField = TextField()
@ -65,12 +64,6 @@ class CheckboxGroupViewController: ModelScrollViewController<DefaultCheckboxGro
.sink { [weak self] text in .sink { [weak self] text in
self?.checkbox?.childText = text self?.checkbox?.childText = text
}.store(in: &subscribers) }.store(in: &subscribers)
surfacePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .surface
}.store(in: &subscribers)
} }
func setupModel() { func setupModel() {
@ -126,26 +119,8 @@ class CheckboxGroupViewController: ModelScrollViewController<DefaultCheckboxGro
} }
//Picker //Picker
var surfacePicker = SurfacePicker()
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
func setupPicker(){ func setupPicker(){
surfacePicker.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 self?.surfacePickerSelectorView.text = item.rawValue

View File

@ -13,11 +13,10 @@ import Combine
class CheckboxViewController: ModelScrollViewController<DefaultCheckboxModel> { class CheckboxViewController: ModelScrollViewController<DefaultCheckboxModel> {
enum PickerType { lazy var surfacePickerSelectorView = {
case surface SurfacePickerSelectorView(picker: self.picker)
} }()
var surfacePickerSelectorView = PickerSelectorView(title: "light")
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var labelTextField = TextField() var labelTextField = TextField()
var childTextField = TextField() var childTextField = TextField()
@ -78,13 +77,6 @@ class CheckboxViewController: ModelScrollViewController<DefaultCheckboxModel> {
.sink { [weak self] text in .sink { [weak self] text in
self?.checkbox.errorText = text self?.checkbox.errorText = text
}.store(in: &subscribers) }.store(in: &subscribers)
surfacePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .surface
}.store(in: &subscribers)
} }
func setupModel() { func setupModel() {
@ -124,26 +116,8 @@ class CheckboxViewController: ModelScrollViewController<DefaultCheckboxModel> {
} }
//Picker //Picker
var surfacePicker = SurfacePicker()
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
func setupPicker(){ func setupPicker(){
surfacePicker.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 self?.surfacePickerSelectorView.text = item.rawValue

View File

@ -12,12 +12,20 @@ import VDSColorTokens
class LabelViewController: ModelScrollViewController<DefaultLabelModel> { class LabelViewController: ModelScrollViewController<DefaultLabelModel> {
enum PickerType { lazy var surfacePickerSelectorView = {
case surface, textSize, fontCategory SurfacePickerSelectorView(picker: self.picker)
} }()
var surfacePickerSelectorView = PickerSelectorView(title: "")
var textSizePickerSelectorView = PickerSelectorView(title: "") lazy var textSizePickerSelectorView = {
var fontCategoryPickerSelectorView = PickerSelectorView(title: "") TextSizePickerSelectorView(title: "",
picker: self.picker)
}()
lazy var fontCategoryPickerSelectorView = {
FontCategoryPickerSelectorView(title: "",
picker: self.picker)
}()
var boldSwitch = UISwitch() var boldSwitch = UISwitch()
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var textField = TextField() var textField = TextField()
@ -55,24 +63,6 @@ class LabelViewController: ModelScrollViewController<DefaultLabelModel> {
self?.updateLabelStyle() self?.updateLabelStyle()
}.store(in: &subscribers) }.store(in: &subscribers)
surfacePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .surface
}.store(in: &subscribers)
fontCategoryPickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .fontCategory
}.store(in: &subscribers)
textSizePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .textSize
}.store(in: &subscribers)
textField textField
.textPublisher .textPublisher
.sink { [weak self] text in .sink { [weak self] text in
@ -110,37 +100,12 @@ class LabelViewController: ModelScrollViewController<DefaultLabelModel> {
} }
//Picker //Picker
var surfacePicker = SurfacePicker()
var textSizePicker = TextSizePicker()
var fontCategoryPicker = FontCategoryPicker()
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
case .textSize:
update(object: textSizePicker)
case .fontCategory:
update(object: fontCategoryPicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
private var fontCategory: TypographicalStyle.FontCategory = .feature { private var fontCategory: TypographicalStyle.FontCategory = .feature {
didSet { didSet {
fontCategoryPickerSelectorView.text = fontCategory.rawValue fontCategoryPickerSelectorView.text = fontCategory.rawValue
textSizePicker.items = fontCategory.sizes textSizePickerSelectorView.items = fontCategory.sizes
if textSizePicker.items.count > 0 { if textSizePickerSelectorView.items.count > 0 {
textSize = textSizePicker.items[0] textSize = textSizePickerSelectorView.items[0]
} else { } else {
textSize = nil textSize = nil
} }
@ -163,17 +128,17 @@ class LabelViewController: ModelScrollViewController<DefaultLabelModel> {
} }
func setupPicker(){ func setupPicker(){
surfacePicker.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 self?.surfacePickerSelectorView.text = item.rawValue
} }
textSizePicker.onPickerDidSelect = { [weak self] item in textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.textSize = item self?.textSize = item
} }
fontCategoryPicker.onPickerDidSelect = { [weak self] item in fontCategoryPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.fontCategory = item self?.fontCategory = item
} }
} }

View File

@ -13,13 +13,12 @@ import Combine
class RadioBoxGroupViewController: ModelScrollViewController<DefaultRadioBoxGroupModel> { class RadioBoxGroupViewController: ModelScrollViewController<DefaultRadioBoxGroupModel> {
enum PickerType { lazy var surfacePickerSelectorView = {
case surface SurfacePickerSelectorView(picker: self.picker)
} }()
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var strikeThroughSwitch = UISwitch() var strikeThroughSwitch = UISwitch()
var surfacePickerSelectorView = PickerSelectorView(title: "light")
var textField = TextField() var textField = TextField()
var subTextField = TextField() var subTextField = TextField()
var subTextRightField = TextField() var subTextRightField = TextField()
@ -73,12 +72,6 @@ class RadioBoxGroupViewController: ModelScrollViewController<DefaultRadioBoxGro
.sink { [weak self] text in .sink { [weak self] text in
self?.radioBox?.subTextRight = text self?.radioBox?.subTextRight = text
}.store(in: &subscribers) }.store(in: &subscribers)
surfacePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .surface
}.store(in: &subscribers)
} }
func setupModel(){ func setupModel(){
@ -136,30 +129,13 @@ class RadioBoxGroupViewController: ModelScrollViewController<DefaultRadioBoxGro
} }
//Picker //Picker
var surfacePicker = SurfacePicker()
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
func setupPicker(){ func setupPicker(){
surfacePicker.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 self?.surfacePickerSelectorView.text = item.rawValue
} }
} }
} }

View File

@ -13,10 +13,10 @@ import Combine
class RadioButtonViewController: ModelScrollViewController<DefaultRadioButtonGroupModel> { class RadioButtonViewController: ModelScrollViewController<DefaultRadioButtonGroupModel> {
enum PickerType { lazy var surfacePickerSelectorView = {
case surface SurfacePickerSelectorView(picker: self.picker)
} }()
var surfacePickerSelectorView = PickerSelectorView(title: "light")
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var labelTextField = TextField() var labelTextField = TextField()
var childTextField = TextField() var childTextField = TextField()
@ -64,11 +64,6 @@ class RadioButtonViewController: ModelScrollViewController<DefaultRadioButtonGr
self?.radioButton?.childText = text self?.radioButton?.childText = text
}.store(in: &subscribers) }.store(in: &subscribers)
surfacePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .surface
}.store(in: &subscribers)
} }
func setupModel(){ func setupModel(){
@ -129,31 +124,14 @@ class RadioButtonViewController: ModelScrollViewController<DefaultRadioButtonGr
} }
//Picker //Picker
var surfacePicker = SurfacePicker()
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
func setupPicker(){ func setupPicker(){
picker.isHidden = true picker.isHidden = true
surfacePicker.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 self?.surfacePickerSelectorView.text = item.rawValue
} }
} }
} }

View File

@ -13,14 +13,12 @@ import Combine
class RadioSwatchGroupViewController: ModelScrollViewController<DefaultRadioSwatchGroupModel> { class RadioSwatchGroupViewController: ModelScrollViewController<DefaultRadioSwatchGroupModel> {
enum PickerType { lazy var surfacePickerSelectorView = {
case surface SurfacePickerSelectorView(picker: self.picker)
} }()
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var strikeThroughSwitch = UISwitch() var strikeThroughSwitch = UISwitch()
var surfacePickerSelectorView = PickerSelectorView(title: "light")
var radioSwatchGroup = RadioSwatchGroup() var radioSwatchGroup = RadioSwatchGroup()
override func viewDidLoad() { override func viewDidLoad() {
@ -58,12 +56,6 @@ class RadioSwatchGroupViewController: ModelScrollViewController<DefaultRadioSwa
self?.model.selectors = selectors self?.model.selectors = selectors
} }
}.store(in: &subscribers) }.store(in: &subscribers)
surfacePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .surface
}.store(in: &subscribers)
} }
func setupModel(){ func setupModel(){
@ -141,30 +133,13 @@ class RadioSwatchGroupViewController: ModelScrollViewController<DefaultRadioSwa
} }
//Picker //Picker
var surfacePicker = SurfacePicker()
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
func setupPicker(){ func setupPicker(){
surfacePicker.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 self?.surfacePickerSelectorView.text = item.rawValue
} }
} }
} }

View File

@ -12,11 +12,19 @@ import VDSColorTokens
class ToggleViewController: ModelScrollViewController<DefaultToggleModel> { class ToggleViewController: ModelScrollViewController<DefaultToggleModel> {
enum PickerType { lazy var surfacePickerSelectorView = {
case surface, textSize, textPosition SurfacePickerSelectorView(picker: self.picker)
} }()
lazy var textSizePickerSelectorView = {
TextSizePickerSelectorView(title: "Small",
picker: self.picker)
}()
lazy var textPositionPickerSelectorView = {
TextPositionPickerSelectorView(picker: self.picker)
}()
var surfacePickerSelectorView = PickerSelectorView(title: "light")
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var showTextSwitch = UISwitch() var showTextSwitch = UISwitch()
@ -31,8 +39,6 @@ class ToggleViewController: ModelScrollViewController<DefaultToggleModel> {
}() }()
var boldSwitch = UISwitch() var boldSwitch = UISwitch()
var textSizePickerSelectorView = PickerSelectorView(title: "Large")
var textPositionPickerSelectorView = PickerSelectorView(title: "left")
var onTextField = TextField() var onTextField = TextField()
var offTextField = TextField() var offTextField = TextField()
@ -72,24 +78,6 @@ class ToggleViewController: ModelScrollViewController<DefaultToggleModel> {
self?.textFormStackView.isHidden = !sender.isOn self?.textFormStackView.isHidden = !sender.isOn
}.store(in: &subscribers) }.store(in: &subscribers)
surfacePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .surface
}.store(in: &subscribers)
textSizePickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .textSize
}.store(in: &subscribers)
textPositionPickerSelectorView.button
.publisher(for: .touchUpInside)
.sink { [weak self] _ in
self?.pickerType = .textPosition
}.store(in: &subscribers)
disabledSwitch disabledSwitch
.publisher(for: .valueChanged) .publisher(for: .valueChanged)
.sink { [weak self] sender in .sink { [weak self] sender in
@ -123,47 +111,24 @@ class ToggleViewController: ModelScrollViewController<DefaultToggleModel> {
} }
//Picker //Picker
var surfacePicker = SurfacePicker()
var textSizePicker = TextSizePicker()
var textPositionPicker = TextPositionPicker()
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
case .textSize:
update(object: textSizePicker)
case .textPosition:
update(object: textPositionPicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
func setupPicker(){ func setupPicker(){
surfacePicker.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 self?.surfacePickerSelectorView.text = item.rawValue
} }
textSizePicker.onPickerDidSelect = { [weak self] item in textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.toggle.fontSize = item self?.toggle.fontSize = item
self?.textSizePickerSelectorView.text = item.rawValue self?.textSizePickerSelectorView.text = item.rawValue
} }
textPositionPicker.onPickerDidSelect = { [weak self] item in textPositionPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.toggle.textPosition = item self?.toggle.textPosition = item
self?.textPositionPickerSelectorView.text = item.rawValue self?.textPositionPickerSelectorView.text = item.rawValue
} }
} }
} }