From 9dd5f1fadd008719f2f517e92ba1e25a0cff4731 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 2 May 2023 11:32:21 -0500 Subject: [PATCH] refactored controllers to show border/touch areas Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 2 +- .../ViewControllers/BadgeViewController.swift | 30 +++---- .../ViewControllers/BaseViewController.swift | 16 +++- .../ButtonGroupViewController.swift | 49 +++++----- .../ButtonViewController.swift | 37 ++++---- .../CheckBoxGroupViewController.swift | 26 +++--- .../CheckboxViewController.swift | 46 +++++----- .../ViewControllers/IconViewController.swift | 32 ++++--- .../InputFieldViewController.swift | 90 +++++++++---------- .../ViewControllers/LabelViewController.swift | 30 +++---- .../ViewControllers/LineViewController.swift | 12 +-- .../NotificationViewController.swift | 45 +++++----- .../RadioBoxGroupViewController.swift | 26 +++--- .../RadioButtonViewController.swift | 28 +++--- .../RadioSwatchGroupViewController.swift | 26 +++--- .../TextAreaViewController.swift | 71 ++++++++------- .../TextLinkCaretViewController.swift | 29 +++--- .../TextLinkViewController.swift | 32 ++++--- .../TileContainerViewController.swift | 54 +++++------ .../TileletViewController.swift | 61 +++++++------ .../TitleLockupViewController.swift | 40 ++++----- .../ToggleViewController.swift | 38 ++++---- .../TooltipViewController.swift | 40 ++++----- .../TrailingTooltipLabel.swift | 52 ++++++----- 24 files changed, 452 insertions(+), 460 deletions(-) diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index a262153..3720dbb 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -294,7 +294,6 @@ EAF7F09B2899B92400B287F5 /* CheckboxViewController.swift */, EA985C00296CC21C00F2FF2E /* IconViewController.swift */, EAA5EEAC28EB6924003B3210 /* InputFieldViewController.swift */, - EAC9257F29119FC400091998 /* TextLinkViewController.swift */, EAB1D2D328AC409F00DAE764 /* LabelViewController.swift */, 44604AD829CE1CF900E62B51 /* LineViewController.swift */, 445BA07929C088470036A7C5 /* NotificationViewController.swift */, @@ -302,6 +301,7 @@ EAF7F11928A14A0E00B287F5 /* RadioButtonViewController.swift */, EA84F76128BE4AE500D67ABC /* RadioSwatchGroupViewController.swift */, EA985C24296E06EA00F2FF2E /* TextAreaViewController.swift */, + EAC9257F29119FC400091998 /* TextLinkViewController.swift */, EA0FC2C02912DC5500DF80B4 /* TextLinkCaretViewController.swift */, EA5E304F294D11540082B959 /* TileContainerViewController.swift */, EA5E305B295111050082B959 /* TileletViewController.swift */, diff --git a/VDSSample/ViewControllers/BadgeViewController.swift b/VDSSample/ViewControllers/BadgeViewController.swift index 7b101df..e1c55fe 100644 --- a/VDSSample/ViewControllers/BadgeViewController.swift +++ b/VDSSample/ViewControllers/BadgeViewController.swift @@ -11,7 +11,7 @@ import VDS import VDSColorTokens import Combine -class BadgeViewController: BaseViewController { +class BadgeViewController: BaseViewController { enum NumberOfLines: String, CaseIterable { case unlimited @@ -51,20 +51,18 @@ class BadgeViewController: BaseViewController { var textField = TextField() var maxWidthTextField = NumericField() - var badge = Badge() override func allTextFields() -> [TextField]? { [textField, maxWidthTextField] } override func viewDidLoad() { super.viewDidLoad() - - addContentTopView(view: .makeWrapper(for: badge)) - setupForm() + addContentTopView(view: .makeWrapper(for: component)) setupPicker() setupModel() } - func setupForm(){ + override func setupForm(){ + super.setupForm() addFormRow(label: "Fill Color", view: fillColorPickerSelectorView) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Text", view: textField) @@ -74,7 +72,7 @@ class BadgeViewController: BaseViewController { textField .textPublisher .sink { [weak self] text in - self?.badge.text = text + self?.component.text = text }.store(in: &subscribers) maxWidthTextField @@ -84,33 +82,33 @@ class BadgeViewController: BaseViewController { if let n = NumberFormatter().number(from: text) { float = CGFloat(truncating: n) } - self?.badge.maxWidth = float + self?.component.maxWidth = float }.store(in: &subscribers) } func setupModel() { - badge.fillColor = .red - badge.text = "Terms and conditions" - badge.numberOfLines = 1 + component.fillColor = .red + component.text = "Terms and conditions" + component.numberOfLines = 1 //setup UI - surfacePickerSelectorView.text = badge.surface.rawValue - textField.text = badge.text + surfacePickerSelectorView.text = component.surface.rawValue + textField.text = component.text } func setupPicker(){ surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.badge.surface = item + self?.component.surface = item self?.contentTopView.backgroundColor = item.color } fillColorPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.badge.fillColor = item + self?.component.fillColor = item } numberOfLinesPickerSelectorView.onPickerDidSelect = { [weak self] item in - self?.badge.numberOfLines = item.intValue + self?.component.numberOfLines = item.intValue } } } diff --git a/VDSSample/ViewControllers/BaseViewController.swift b/VDSSample/ViewControllers/BaseViewController.swift index d24647d..06fc770 100644 --- a/VDSSample/ViewControllers/BaseViewController.swift +++ b/VDSSample/ViewControllers/BaseViewController.swift @@ -10,7 +10,7 @@ import UIKit import Combine import VDS -public class BaseViewController: UIViewController, Initable { +public class BaseViewController: UIViewController, Initable { deinit { print("\(Self.self) deinit") } @@ -71,6 +71,14 @@ public class BaseViewController: UIViewController, Initable { } }() + public var component = Component() + + lazy var debugViewSwitch = Toggle().with{ + $0.onChange = { [weak self] sender in + self?.component.debugBorder(show: sender.isOn, color: .blue) + } + } + public var contentView: UIView = { return UIView().with { $0.translatesAutoresizingMaskIntoConstraints = false @@ -136,10 +144,16 @@ public class BaseViewController: UIViewController, Initable { picker.pinLeading() picker.pinTrailing() picker.isHidden = true + + setupForm() } private let scrollViewController = ScrollViewController() + public func setupForm() { + addFormRow(label: "Show Bounds", view: .makeWrapper(for: debugViewSwitch)) + } + 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) diff --git a/VDSSample/ViewControllers/ButtonGroupViewController.swift b/VDSSample/ViewControllers/ButtonGroupViewController.swift index 29663d6..5e81102 100644 --- a/VDSSample/ViewControllers/ButtonGroupViewController.swift +++ b/VDSSample/ViewControllers/ButtonGroupViewController.swift @@ -10,7 +10,7 @@ import UIKit import VDS import VDSColorTokens -class ButtonGroupViewController: BaseViewController { +class ButtonGroupViewController: BaseViewController { var collectionView: UICollectionView! public enum RowQuantity: String, CaseIterable { @@ -64,7 +64,6 @@ class ButtonGroupViewController: BaseViewController { var widthTextField = NumericField() var percentageTextField = NumericField() - let largeButtonGroup = ButtonGroup() let smallButtonGroup = ButtonGroup() let largeLabel = Label().with{ $0.text = "Large Button Group"; $0.textStyle = .boldTitleSmall } let smallLabel = Label().with{ $0.text = "Small Button Group"; $0.textStyle = .boldTitleSmall } @@ -74,12 +73,12 @@ class ButtonGroupViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - let stackView = UIStackView(arrangedSubviews: [largeLabel, largeButtonGroup, smallLabel, smallButtonGroup]) - stackView.setCustomSpacing(50, after: largeButtonGroup) + let stackView = UIStackView(arrangedSubviews: [largeLabel, component, smallLabel, smallButtonGroup]) + stackView.setCustomSpacing(50, after: component) stackView.axis = .vertical stackView.spacing = 30 - largeButtonGroup.buttons = [ + component.buttons = [ makeButton("Secondary", label: label).with{ $0.use = .secondary }, makeButton("Primary", label: label), makeTextLink("Large Text Link", label: label), @@ -99,12 +98,18 @@ class ButtonGroupViewController: BaseViewController { percentageTextField.isEnabled = false percentageTextField.placeholder = "Active RowQty != none" widthTextField.placeholder = "Active RowQty == none" - setupForm() setupPicker() setupModel() + + debugViewSwitch.onChange = { [weak self] sender in + self?.component.debugBorder(show: sender.isOn, color: .blue) + self?.smallButtonGroup.debugBorder(show: sender.isOn, color: .blue) + } + } - func setupForm(){ + override func setupForm(){ + super.setupForm() addFormRow(label: "Button Action", view: label) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) @@ -116,7 +121,7 @@ class ButtonGroupViewController: BaseViewController { disabledSwitch.onChange = { [weak self] sender in self?.largeLabel.disabled = sender.isOn self?.smallLabel.disabled = sender.isOn - self?.largeButtonGroup.disabled = sender.isOn + self?.component.disabled = sender.isOn self?.smallButtonGroup.disabled = sender.isOn } @@ -124,24 +129,24 @@ class ButtonGroupViewController: BaseViewController { .textPublisher .sink { [weak self] text in if let n = NumberFormatter().number(from: text) { - self?.largeButtonGroup.buttonWidth = CGFloat(truncating: n) + self?.component.buttonWidth = CGFloat(truncating: n) self?.smallButtonGroup.buttonWidth = CGFloat(truncating: n) self?.percentageTextField.text = "" } else { - self?.largeButtonGroup.buttonWidth = nil + self?.component.buttonWidth = nil } }.store(in: &subscribers) percentageTextField .textPublisher .sink { [weak self] text in - let rowQty = self?.largeButtonGroup.rowQuantity ?? 0 + let rowQty = self?.component.rowQuantity ?? 0 if let n = NumberFormatter().number(from: text), n.intValue <= 100, rowQty > 0 { - self?.largeButtonGroup.buttonPercentage = CGFloat(truncating: n) + self?.component.buttonPercentage = CGFloat(truncating: n) self?.smallButtonGroup.buttonPercentage = CGFloat(truncating: n) self?.widthTextField.text = "" } else { - self?.largeButtonGroup.buttonPercentage = nil + self?.component.buttonPercentage = nil self?.smallButtonGroup.buttonPercentage = nil } }.store(in: &subscribers) @@ -150,10 +155,10 @@ class ButtonGroupViewController: BaseViewController { func setupModel() { //setup UI - surfacePickerSelectorView.text = largeButtonGroup.surface.rawValue - buttonPositionSelectorView.text = largeButtonGroup.buttonPosition.rawValue - disabledSwitch.isOn = largeButtonGroup.disabled - rowQuantitySelectorView.text = RowQuantity(quantity: largeButtonGroup.rowQuantity).rawValue + surfacePickerSelectorView.text = component.surface.rawValue + buttonPositionSelectorView.text = component.buttonPosition.rawValue + disabledSwitch.isOn = component.disabled + rowQuantitySelectorView.text = RowQuantity(quantity: component.rowQuantity).rawValue widthTextField.text = "" } @@ -162,13 +167,13 @@ class ButtonGroupViewController: BaseViewController { surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.largeLabel.surface = item self?.smallLabel.surface = item - self?.largeButtonGroup.surface = item + self?.component.surface = item self?.smallButtonGroup.surface = item self?.contentTopView.backgroundColor = item.color } buttonPositionSelectorView.onPickerDidSelect = { [weak self] item in - self?.largeButtonGroup.buttonPosition = item + self?.component.buttonPosition = item self?.smallButtonGroup.buttonPosition = item } @@ -180,15 +185,15 @@ class ButtonGroupViewController: BaseViewController { self?.percentageTextField.text = "" } else { self?.widthTextField.text = "" - self?.largeButtonGroup.buttonWidth = nil + self?.component.buttonWidth = nil self?.smallButtonGroup.buttonWidth = nil } if UIDevice.isIPad { - self?.largeButtonGroup.rowQuantityTablet = item.intValue + self?.component.rowQuantityTablet = item.intValue self?.smallButtonGroup.rowQuantityTablet = item.intValue } else { - self?.largeButtonGroup.rowQuantityPhone = item.intValue + self?.component.rowQuantityPhone = item.intValue self?.smallButtonGroup.rowQuantityPhone = item.intValue } } diff --git a/VDSSample/ViewControllers/ButtonViewController.swift b/VDSSample/ViewControllers/ButtonViewController.swift index aacd340..b484f0b 100644 --- a/VDSSample/ViewControllers/ButtonViewController.swift +++ b/VDSSample/ViewControllers/ButtonViewController.swift @@ -10,7 +10,7 @@ import UIKit import VDS import VDSColorTokens -class ButtonViewController: BaseViewController { +class ButtonViewController: BaseViewController