From 50dcae0ddde9d07de58f635e5188ab6dc4a3477f Mon Sep 17 00:00:00 2001 From: Jarrod Courtney Date: Fri, 23 Sep 2022 11:03:16 -0500 Subject: [PATCH 1/4] starting of button Signed-off-by: Jarrod Courtney --- VDSSample.xcodeproj/project.pbxproj | 4 + VDSSample/Protocols/PickerBase.swift | 7 + .../ButtonViewController.swift | 139 ++++++++++++++++++ .../ViewControllers/MenuViewController.swift | 4 +- 4 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 VDSSample/ViewControllers/ButtonViewController.swift diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index f26d602..f8c2565 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 5FC35BE928D5235A004EBEAC /* ButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */; }; EA3C3B9D289966EF000CA526 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3C3B9C289966EF000CA526 /* AppDelegate.swift */; }; EA3C3B9F289966EF000CA526 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3C3B9E289966EF000CA526 /* SceneDelegate.swift */; }; EA3C3BA4289966EF000CA526 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EA3C3BA2289966EF000CA526 /* Main.storyboard */; }; @@ -87,6 +88,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonViewController.swift; sourceTree = ""; }; EA3C3B99289966EF000CA526 /* VDSSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VDSSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; EA3C3B9C289966EF000CA526 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; EA3C3B9E289966EF000CA526 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; @@ -251,6 +253,7 @@ EAF7F11928A14A0E00B287F5 /* RadioButtonViewController.swift */, EA84F76128BE4AE500D67ABC /* RadioSwatchGroupViewController.swift */, EA3C3BB328996775000CA526 /* ToggleViewController.swift */, + 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */, ); path = ViewControllers; sourceTree = ""; @@ -404,6 +407,7 @@ EAF7F11A28A14A0E00B287F5 /* RadioButtonViewController.swift in Sources */, EA89204628B66CE2006B9984 /* ScrollViewController.swift in Sources */, EA3C3B9F289966EF000CA526 /* SceneDelegate.swift in Sources */, + 5FC35BE928D5235A004EBEAC /* ButtonViewController.swift in Sources */, EA89204A28B66CE2006B9984 /* KeyboardFrameChange.swift in Sources */, EA3C3BB428996775000CA526 /* PickerBase.swift in Sources */, EAB1D2C928AAAA1D00DAE764 /* ModelScrollViewController.swift in Sources */, diff --git a/VDSSample/Protocols/PickerBase.swift b/VDSSample/Protocols/PickerBase.swift index 5ad6d07..4f7b062 100644 --- a/VDSSample/Protocols/PickerBase.swift +++ b/VDSSample/Protocols/PickerBase.swift @@ -95,3 +95,10 @@ class FontCategoryPicker: PickerBase { super.init(items: TypographicalStyle.FontCategory.allCases) } } + +class UsePicker: PickerBase { + init(){ + super.init(items: [.primary, .secondary]) + } +} + diff --git a/VDSSample/ViewControllers/ButtonViewController.swift b/VDSSample/ViewControllers/ButtonViewController.swift new file mode 100644 index 0000000..fc76574 --- /dev/null +++ b/VDSSample/ViewControllers/ButtonViewController.swift @@ -0,0 +1,139 @@ +// +// ButtonViewController.swift +// VDSSample +// +// Created by Jarrod Courtney on 9/16/22. +// + +import Foundation +import UIKit +import VDS +import VDSColorTokens + +class ButtonViewController: ModelScrollViewController { + + enum PickerType { + case surface, use + } + var surfacePickerSelectorView = PickerSelectorView(title: "") + var usePickerSelectorView = PickerSelectorView(title: "") + + var disabledSwitch = UISwitch() + var textField = TextField() + var widthTextField = TextField() + + let button = Button() + + override func viewDidLoad() { + super.viewDidLoad() + //addContentTopView(view: button) + contentTopView.addSubview(button) + + setupForm() + setupPicker() + setupModel() + } + + func setupForm(){ + addFormRow(label: "Surface", view: surfacePickerSelectorView) + addFormRow(label: "Use", view: usePickerSelectorView) + addFormRow(label: "Disabled", view: disabledSwitch) + addFormRow(label: "Label", view: textField) + addFormRow(label: "Width", view: widthTextField) + + + disabledSwitch + .publisher(for: .valueChanged) + .sink { [weak self] sender in + self?.button.disabled = sender.isOn + }.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 + .textPublisher + .sink { [weak self] text in + self?.button.setTitle(text, for: .normal) + }.store(in: &subscribers) + + widthTextField + .textPublisher + .sink { [weak self] text in + if let n = NumberFormatter().number(from: text) { + self?.button.buttonWidth = CGFloat(truncating: n) + } + }.store(in: &subscribers) + + } + + func setupModel() { + var defaultModel = DefaultButtonModel() + defaultModel.text = "Button" + set(with: defaultModel) + + button + .handlerPublisher() + .sink { [weak self] viewModel in + self?.model = viewModel + }.store(in: &subscribers) + + //setup UI + surfacePickerSelectorView.text = model.surface.rawValue + disabledSwitch.isOn = model.disabled + textField.text = model.text + usePickerSelectorView.text = model.use.rawValue + widthTextField.text = "200" + } + + override func updateView(viewModel: DefaultButtonModel) { + button.set(with: viewModel) + } + + //Picker + var surfacePicker = SurfacePicker() + var usePicker = UsePicker() + var buttonSizePicker = TextSizePicker() + + 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) + } + picker.reloadAllComponents() + picker.selectRow(0, inComponent: 0, animated: false) + picker.isHidden = false + } + } + + func setupPicker(){ + surfacePicker.onPickerDidSelect = { [weak self] item in + self?.button.surface = item + self?.contentTopView.backgroundColor = item.color + self?.surfacePickerSelectorView.text = item.rawValue + } + + usePicker.onPickerDidSelect = { [weak self] item in + self?.button.use = item + self?.button.backgroundColor = item.color + self?.usePickerSelectorView.text = item.rawValue + } + } +} diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index 41f71c2..1d705a9 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -25,7 +25,9 @@ class MenuViewController: UITableViewController { MenuComponent(title: "RadioButtonGroup", viewController: RadioButtonViewController.self), MenuComponent(title: "RadioBoxGroup", viewController: RadioBoxGroupViewController.self), MenuComponent(title: "RadioSwatchGroup", viewController: RadioSwatchGroupViewController.self), - MenuComponent(title: "Toggle", viewController: ToggleViewController.self) + MenuComponent(title: "Toggle", viewController: ToggleViewController.self), + MenuComponent(title: "Button", viewController: ButtonViewController.self) + ] override func numberOfSections(in tableView: UITableView) -> Int { From fba9567de7f0c7198516f447eced3042dfbe94b0 Mon Sep 17 00:00:00 2001 From: Jarrod Courtney Date: Fri, 23 Sep 2022 13:42:10 -0500 Subject: [PATCH 2/4] added buttonSize Signed-off-by: Jarrod Courtney --- VDSSample/Protocols/PickerBase.swift | 7 +++++ .../ButtonViewController.swift | 29 ++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/VDSSample/Protocols/PickerBase.swift b/VDSSample/Protocols/PickerBase.swift index 4f7b062..1425543 100644 --- a/VDSSample/Protocols/PickerBase.swift +++ b/VDSSample/Protocols/PickerBase.swift @@ -102,3 +102,10 @@ class UsePicker: PickerBase { } } +class ButtonSizePicker: PickerBase { + init(){ + super.init(items: [.large, .small]) + } +} + + diff --git a/VDSSample/ViewControllers/ButtonViewController.swift b/VDSSample/ViewControllers/ButtonViewController.swift index fc76574..9152f16 100644 --- a/VDSSample/ViewControllers/ButtonViewController.swift +++ b/VDSSample/ViewControllers/ButtonViewController.swift @@ -13,10 +13,11 @@ import VDSColorTokens class ButtonViewController: ModelScrollViewController { enum PickerType { - case surface, use + case surface, use, buttonSize } var surfacePickerSelectorView = PickerSelectorView(title: "") var usePickerSelectorView = PickerSelectorView(title: "") + var buttonSizePickerSelectorView = PickerSelectorView(title: "") var disabledSwitch = UISwitch() var textField = TextField() @@ -26,8 +27,13 @@ class ButtonViewController: ModelScrollViewController { override func viewDidLoad() { super.viewDidLoad() - //addContentTopView(view: button) - contentTopView.addSubview(button) + let view = UIView() + view.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(button) + button.topAnchor.constraint(equalTo: view.topAnchor).isActive = true + button.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true + button.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true + addContentTopView(view: view) setupForm() setupPicker() @@ -40,6 +46,7 @@ class ButtonViewController: ModelScrollViewController { addFormRow(label: "Disabled", view: disabledSwitch) addFormRow(label: "Label", view: textField) addFormRow(label: "Width", view: widthTextField) + addFormRow(label: "Size", view: buttonSizePickerSelectorView) disabledSwitch @@ -73,6 +80,12 @@ class ButtonViewController: ModelScrollViewController { self?.button.buttonWidth = CGFloat(truncating: n) } }.store(in: &subscribers) + + buttonSizePickerSelectorView.button + .publisher(for: .touchUpInside) + .sink { [weak self] _ in + self?.pickerType = .buttonSize + }.store(in: &subscribers) } @@ -93,6 +106,7 @@ class ButtonViewController: ModelScrollViewController { textField.text = model.text usePickerSelectorView.text = model.use.rawValue widthTextField.text = "200" + buttonSizePickerSelectorView.text = Use.Size.large.rawValue } override func updateView(viewModel: DefaultButtonModel) { @@ -102,7 +116,7 @@ class ButtonViewController: ModelScrollViewController { //Picker var surfacePicker = SurfacePicker() var usePicker = UsePicker() - var buttonSizePicker = TextSizePicker() + var buttonSizePicker = ButtonSizePicker() var pickerType: PickerType = .surface { didSet { @@ -116,6 +130,8 @@ class ButtonViewController: ModelScrollViewController { update(object: surfacePicker) case .use: update(object: usePicker) + case .buttonSize: + update(object: buttonSizePicker) } picker.reloadAllComponents() picker.selectRow(0, inComponent: 0, animated: false) @@ -135,5 +151,10 @@ class ButtonViewController: ModelScrollViewController { self?.button.backgroundColor = item.color self?.usePickerSelectorView.text = item.rawValue } + + buttonSizePicker.onPickerDidSelect = { [weak self] item in + self?.button.buttonSize = item + self?.buttonSizePickerSelectorView.text = item.rawValue + } } } From 974219912bf6872c4c78a7c065642ee36ba8007c Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 23 Sep 2022 16:39:24 -0500 Subject: [PATCH 3/4] fixing wire ups Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 2 +- VDSSample/Protocols/PickerBase.swift | 6 ------ VDSSample/ViewControllers/ButtonViewController.swift | 12 ++++++------ VDSSample/ViewControllers/MenuViewController.swift | 5 ++--- 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index 4ec33f9..14cebf8 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -249,6 +249,7 @@ EA3C3BB228996775000CA526 /* MenuViewController.swift */, EAB1D2C828AAAA1D00DAE764 /* ModelScrollViewController.swift */, EA4DB30328DCD25B00103EE3 /* BadgeViewController.swift */, + 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */, EA89204D28B67332006B9984 /* CheckBoxGroupViewController.swift */, EAF7F09B2899B92400B287F5 /* CheckboxViewController.swift */, EAB1D2D328AC409F00DAE764 /* LabelViewController.swift */, @@ -256,7 +257,6 @@ EAF7F11928A14A0E00B287F5 /* RadioButtonViewController.swift */, EA84F76128BE4AE500D67ABC /* RadioSwatchGroupViewController.swift */, EA3C3BB328996775000CA526 /* ToggleViewController.swift */, - 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */, ); path = ViewControllers; sourceTree = ""; diff --git a/VDSSample/Protocols/PickerBase.swift b/VDSSample/Protocols/PickerBase.swift index 1425543..605f5c8 100644 --- a/VDSSample/Protocols/PickerBase.swift +++ b/VDSSample/Protocols/PickerBase.swift @@ -102,10 +102,4 @@ class UsePicker: PickerBase { } } -class ButtonSizePicker: PickerBase { - init(){ - super.init(items: [.large, .small]) - } -} - diff --git a/VDSSample/ViewControllers/ButtonViewController.swift b/VDSSample/ViewControllers/ButtonViewController.swift index 9152f16..ce432cf 100644 --- a/VDSSample/ViewControllers/ButtonViewController.swift +++ b/VDSSample/ViewControllers/ButtonViewController.swift @@ -70,14 +70,14 @@ class ButtonViewController: ModelScrollViewController { textField .textPublisher .sink { [weak self] text in - self?.button.setTitle(text, for: .normal) + self?.button.text = text }.store(in: &subscribers) widthTextField .textPublisher .sink { [weak self] text in if let n = NumberFormatter().number(from: text) { - self?.button.buttonWidth = CGFloat(truncating: n) + self?.button.width = CGFloat(truncating: n) } }.store(in: &subscribers) @@ -105,8 +105,8 @@ class ButtonViewController: ModelScrollViewController { disabledSwitch.isOn = model.disabled textField.text = model.text usePickerSelectorView.text = model.use.rawValue - widthTextField.text = "200" - buttonSizePickerSelectorView.text = Use.Size.large.rawValue + widthTextField.text = "" + buttonSizePickerSelectorView.text = ButtonSize.large.rawValue } override func updateView(viewModel: DefaultButtonModel) { @@ -116,7 +116,7 @@ class ButtonViewController: ModelScrollViewController { //Picker var surfacePicker = SurfacePicker() var usePicker = UsePicker() - var buttonSizePicker = ButtonSizePicker() + var buttonSizePicker = PickerBase.init(items: ButtonSize.allCases) var pickerType: PickerType = .surface { didSet { @@ -153,7 +153,7 @@ class ButtonViewController: ModelScrollViewController { } buttonSizePicker.onPickerDidSelect = { [weak self] item in - self?.button.buttonSize = item + self?.button.size = item self?.buttonSizePickerSelectorView.text = item.rawValue } } diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index 7c3bfa1..c898bcb 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -20,15 +20,14 @@ protocol Initable { class MenuViewController: UITableViewController { let items: [MenuComponent] = [ MenuComponent(title: "Badge", viewController: BadgeViewController.self), + MenuComponent(title: "Button", viewController: ButtonViewController.self), MenuComponent(title: "Checkbox", viewController: CheckboxViewController.self), MenuComponent(title: "CheckboxGroup", viewController: CheckboxGroupViewController.self), MenuComponent(title: "Label", viewController: LabelViewController.self), MenuComponent(title: "RadioButtonGroup", viewController: RadioButtonViewController.self), MenuComponent(title: "RadioBoxGroup", viewController: RadioBoxGroupViewController.self), MenuComponent(title: "RadioSwatchGroup", viewController: RadioSwatchGroupViewController.self), - MenuComponent(title: "Toggle", viewController: ToggleViewController.self), - MenuComponent(title: "Button", viewController: ButtonViewController.self) - + MenuComponent(title: "Toggle", viewController: ToggleViewController.self) ] override func numberOfSections(in tableView: UITableView) -> Int { From 450f2e17f389308b313054362c6df3f26949d451 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 23 Sep 2022 17:03:58 -0500 Subject: [PATCH 4/4] publisher Signed-off-by: Matt Bruce --- VDSSample/ViewControllers/ButtonViewController.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/VDSSample/ViewControllers/ButtonViewController.swift b/VDSSample/ViewControllers/ButtonViewController.swift index ce432cf..08e7ad9 100644 --- a/VDSSample/ViewControllers/ButtonViewController.swift +++ b/VDSSample/ViewControllers/ButtonViewController.swift @@ -100,6 +100,13 @@ class ButtonViewController: ModelScrollViewController { self?.model = viewModel }.store(in: &subscribers) + button + .publisher(for: .touchUpInside) + .sink { control in + print("clicked me") + }.store(in: &subscribers) + + //setup UI surfacePickerSelectorView.text = model.surface.rawValue disabledSwitch.isOn = model.disabled