From 73c5ae8114ccbd7855e1a62701eef990112acd3b Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 21 Dec 2022 09:54:01 -0600 Subject: [PATCH] updated to use a numeric field Signed-off-by: Matt Bruce --- VDSSample/Classes/TextField.swift | 25 ++++++++++++++----- .../ViewControllers/BadgeViewController.swift | 4 +-- .../ViewControllers/BaseViewController.swift | 17 ++++++++++++- .../ButtonGroupViewController.swift | 6 ++--- .../ButtonViewController.swift | 4 +-- .../CheckBoxGroupViewController.swift | 2 +- .../CheckboxViewController.swift | 2 +- .../ViewControllers/LabelViewController.swift | 2 +- .../RadioBoxGroupViewController.swift | 2 +- .../RadioButtonViewController.swift | 2 +- .../TextEntryFieldViewController.swift | 4 +-- .../TextLinkCaretViewController.swift | 2 +- .../TextLinkViewController.swift | 2 +- .../TileContainerViewController.swift | 6 ++--- .../ViewControllers/TiletViewController.swift | 8 +++--- .../TitleLockupViewController.swift | 2 +- .../ToggleViewController.swift | 2 +- 17 files changed, 60 insertions(+), 32 deletions(-) diff --git a/VDSSample/Classes/TextField.swift b/VDSSample/Classes/TextField.swift index d6d64dd..75c077b 100644 --- a/VDSSample/Classes/TextField.swift +++ b/VDSSample/Classes/TextField.swift @@ -9,34 +9,47 @@ import Foundation import UIKit import VDS -class TextField: UITextField { - var textPadding = UIEdgeInsets( +public class TextField: UITextField { + public var isNumeric: Bool = false + + public var textPadding = UIEdgeInsets( top: 10, left: 10, bottom: 10, right: 10 ) - override init(frame: CGRect) { + public override init(frame: CGRect) { super.init(frame: frame) font = TypographicalStyle.BodyLarge.font } - required init?(coder: NSCoder) { + public required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - override func textRect(forBounds bounds: CGRect) -> CGRect { + public override func textRect(forBounds bounds: CGRect) -> CGRect { layer.borderColor = UIColor.black.cgColor layer.borderWidth = 1 let rect = super.textRect(forBounds: bounds) return rect.inset(by: textPadding) } - override func editingRect(forBounds bounds: CGRect) -> CGRect { + public override func editingRect(forBounds bounds: CGRect) -> CGRect { layer.borderColor = UIColor.black.cgColor layer.borderWidth = 1 let rect = super.editingRect(forBounds: bounds) return rect.inset(by: textPadding) } } + +public class NumericField: TextField { + public override init(frame: CGRect) { + super.init(frame: frame) + isNumeric = true + } + + public required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/VDSSample/ViewControllers/BadgeViewController.swift b/VDSSample/ViewControllers/BadgeViewController.swift index db2e291..1ff1d0d 100644 --- a/VDSSample/ViewControllers/BadgeViewController.swift +++ b/VDSSample/ViewControllers/BadgeViewController.swift @@ -50,10 +50,10 @@ class BadgeViewController: BaseViewController { }() var textField = TextField() - var maxWidthTextField = TextField() + var maxWidthTextField = NumericField() var badge = Badge() - override func allTextFields() -> [UITextField]? { [textField, maxWidthTextField] } + override func allTextFields() -> [TextField]? { [textField, maxWidthTextField] } override func viewDidLoad() { super.viewDidLoad() diff --git a/VDSSample/ViewControllers/BaseViewController.swift b/VDSSample/ViewControllers/BaseViewController.swift index 497ba8c..1337731 100644 --- a/VDSSample/ViewControllers/BaseViewController.swift +++ b/VDSSample/ViewControllers/BaseViewController.swift @@ -188,8 +188,23 @@ public class BaseViewController: UIViewController, Initable { } open func setup() { + if let textFields = allTextFields() { for textField in textFields { + if textField.isNumeric { + let keypadToolbar: UIToolbar = UIToolbar() + + // add a done button to the numberpad + keypadToolbar.items=[ + UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: self, action: nil), + UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: textField, action: #selector(UITextField.resignFirstResponder)) + ] + keypadToolbar.sizeToFit() + + // add a toolbar with a done button above the number pad + textField.inputAccessoryView = keypadToolbar + textField.keyboardType = .numberPad + } textField.returnKeyType = .done textField .publisher(for: .editingDidEndOnExit) @@ -205,5 +220,5 @@ public class BaseViewController: UIViewController, Initable { print("\(Self.self) updateView()") } - open func allTextFields() -> [UITextField]? { nil } + open func allTextFields() -> [TextField]? { nil } } diff --git a/VDSSample/ViewControllers/ButtonGroupViewController.swift b/VDSSample/ViewControllers/ButtonGroupViewController.swift index ec2e75a..c88dad1 100644 --- a/VDSSample/ViewControllers/ButtonGroupViewController.swift +++ b/VDSSample/ViewControllers/ButtonGroupViewController.swift @@ -61,15 +61,15 @@ class ButtonGroupViewController: BaseViewController { var label = Label() var disabledSwitch = Toggle() - var widthTextField = TextField() - var percentageTextField = TextField() + var widthTextField = NumericField() + var percentageTextField = NumericField() let largeButtonGroup = ButtonGroup() let smallButtonGroup = ButtonGroup() let largeLabel = Label().with{ $0.text = "Large Button Group"; $0.typograpicalStyle = .BoldTitleSmall } let smallLabel = Label().with{ $0.text = "Small Button Group"; $0.typograpicalStyle = .BoldTitleSmall } - override func allTextFields() -> [UITextField]? { [widthTextField, percentageTextField] } + override func allTextFields() -> [TextField]? { [widthTextField, percentageTextField] } override func viewDidLoad() { super.viewDidLoad() diff --git a/VDSSample/ViewControllers/ButtonViewController.swift b/VDSSample/ViewControllers/ButtonViewController.swift index 8bb498b..2ca100a 100644 --- a/VDSSample/ViewControllers/ButtonViewController.swift +++ b/VDSSample/ViewControllers/ButtonViewController.swift @@ -27,7 +27,7 @@ class ButtonViewController: BaseViewController { var label = Label() var disabledSwitch = Toggle() var textField = TextField() - var widthTextField = TextField() + var widthTextField = NumericField() var button: Button! @@ -41,7 +41,7 @@ class ButtonViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [textField, widthTextField] } + override func allTextFields() -> [TextField]? { [textField, widthTextField] } func setupForm(){ addFormRow(label: "Button Action", view: label) diff --git a/VDSSample/ViewControllers/CheckBoxGroupViewController.swift b/VDSSample/ViewControllers/CheckBoxGroupViewController.swift index abe2586..10314e5 100644 --- a/VDSSample/ViewControllers/CheckBoxGroupViewController.swift +++ b/VDSSample/ViewControllers/CheckBoxGroupViewController.swift @@ -29,7 +29,7 @@ class CheckboxGroupViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [labelTextField, childTextField] } + override func allTextFields() -> [TextField]? { [labelTextField, childTextField] } func setupForm() { addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) diff --git a/VDSSample/ViewControllers/CheckboxViewController.swift b/VDSSample/ViewControllers/CheckboxViewController.swift index 70a09d9..3682077 100644 --- a/VDSSample/ViewControllers/CheckboxViewController.swift +++ b/VDSSample/ViewControllers/CheckboxViewController.swift @@ -30,7 +30,7 @@ class CheckboxViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [labelTextField, childTextField, errorTextField] } + override func allTextFields() -> [TextField]? { [labelTextField, childTextField, errorTextField] } func setupForm(){ addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) diff --git a/VDSSample/ViewControllers/LabelViewController.swift b/VDSSample/ViewControllers/LabelViewController.swift index 0f400b1..ce40745 100644 --- a/VDSSample/ViewControllers/LabelViewController.swift +++ b/VDSSample/ViewControllers/LabelViewController.swift @@ -38,7 +38,7 @@ class LabelViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [textField] } + override func allTextFields() -> [TextField]? { [textField] } func setupForm(){ addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) diff --git a/VDSSample/ViewControllers/RadioBoxGroupViewController.swift b/VDSSample/ViewControllers/RadioBoxGroupViewController.swift index 7e0bcc6..d24917a 100644 --- a/VDSSample/ViewControllers/RadioBoxGroupViewController.swift +++ b/VDSSample/ViewControllers/RadioBoxGroupViewController.swift @@ -31,7 +31,7 @@ class RadioBoxGroupViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [textField, subTextField, subTextRightField] } + override func allTextFields() -> [TextField]? { [textField, subTextField, subTextRightField] } func setupForm() { addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) diff --git a/VDSSample/ViewControllers/RadioButtonViewController.swift b/VDSSample/ViewControllers/RadioButtonViewController.swift index ea31fcf..9b09730 100644 --- a/VDSSample/ViewControllers/RadioButtonViewController.swift +++ b/VDSSample/ViewControllers/RadioButtonViewController.swift @@ -29,7 +29,7 @@ class RadioButtonViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [labelTextField, childTextField] } + override func allTextFields() -> [TextField]? { [labelTextField, childTextField] } func setupForm() { addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) diff --git a/VDSSample/ViewControllers/TextEntryFieldViewController.swift b/VDSSample/ViewControllers/TextEntryFieldViewController.swift index ed87801..8174cd6 100644 --- a/VDSSample/ViewControllers/TextEntryFieldViewController.swift +++ b/VDSSample/ViewControllers/TextEntryFieldViewController.swift @@ -25,7 +25,7 @@ class TextEntryFieldViewController: BaseViewController { var errorTextField = TextField() var successTextField = TextField() var helperTextField = TextField() - var widthTextField = TextField() + var widthTextField = NumericField() var showErrorSwitch = Toggle() var showSuccessSwitch = Toggle() var tooltipTitleTextField = TextField() @@ -41,7 +41,7 @@ class TextEntryFieldViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [labelTextField, errorTextField, successTextField, helperTextField, widthTextField, tooltipTitleTextField, tooltipContentTextField] } + override func allTextFields() -> [TextField]? { [labelTextField, errorTextField, successTextField, helperTextField, widthTextField, tooltipTitleTextField, tooltipContentTextField] } func setupForm(){ addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) diff --git a/VDSSample/ViewControllers/TextLinkCaretViewController.swift b/VDSSample/ViewControllers/TextLinkCaretViewController.swift index 1ba4314..739e69d 100644 --- a/VDSSample/ViewControllers/TextLinkCaretViewController.swift +++ b/VDSSample/ViewControllers/TextLinkCaretViewController.swift @@ -34,7 +34,7 @@ class TextLinkCaretViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [textField] } + override func allTextFields() -> [TextField]? { [textField] } func setupForm(){ addFormRow(label: "Button Action", view: label) diff --git a/VDSSample/ViewControllers/TextLinkViewController.swift b/VDSSample/ViewControllers/TextLinkViewController.swift index 9b14103..ff37f85 100644 --- a/VDSSample/ViewControllers/TextLinkViewController.swift +++ b/VDSSample/ViewControllers/TextLinkViewController.swift @@ -35,7 +35,7 @@ class TextLinkViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [textField] } + override func allTextFields() -> [TextField]? { [textField] } func setupForm(){ addFormRow(label: "Button Action", view: label) diff --git a/VDSSample/ViewControllers/TileContainerViewController.swift b/VDSSample/ViewControllers/TileContainerViewController.swift index 7cde3b7..e59486f 100644 --- a/VDSSample/ViewControllers/TileContainerViewController.swift +++ b/VDSSample/ViewControllers/TileContainerViewController.swift @@ -37,8 +37,8 @@ class TileContainerViewController: BaseViewController { var showBackgroundImageSwitch = Toggle() var showBorderSwitch = Toggle() var showDropShadowSwitch = Toggle() - var heightTextField = TextField() - var widthTextField = TextField() + var heightTextField = NumericField() + var widthTextField = NumericField() var tileContainer = TileContainer() var backgroundImage = UIImage(named: "backgroundTest")! @@ -52,7 +52,7 @@ class TileContainerViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [widthTextField, heightTextField] } + override func allTextFields() -> [TextField]? { [widthTextField, heightTextField] } func setupForm(){ formStackView.addArrangedSubview(Label().with{ diff --git a/VDSSample/ViewControllers/TiletViewController.swift b/VDSSample/ViewControllers/TiletViewController.swift index d59ee65..fd0d3c6 100644 --- a/VDSSample/ViewControllers/TiletViewController.swift +++ b/VDSSample/ViewControllers/TiletViewController.swift @@ -32,9 +32,9 @@ class TiletViewController: BaseViewController { var titleTextField = TextField() var subTitleTextField = TextField() - var widthTextField = TextField() - var textPercentageTextField = TextField() - var textWidthTextField = TextField() + var widthTextField = NumericField() + var textPercentageTextField = NumericField() + var textWidthTextField = NumericField() var tilet = Tilet() @@ -47,7 +47,7 @@ class TiletViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [titleTextField, subTitleTextField, widthTextField, textWidthTextField, textPercentageTextField] } + override func allTextFields() -> [TextField]? { [titleTextField, subTitleTextField, widthTextField, textWidthTextField, textPercentageTextField] } func setupForm(){ addFormRow(label: "Surface", view: surfacePickerSelectorView) diff --git a/VDSSample/ViewControllers/TitleLockupViewController.swift b/VDSSample/ViewControllers/TitleLockupViewController.swift index 63e4fc3..5919ea4 100644 --- a/VDSSample/ViewControllers/TitleLockupViewController.swift +++ b/VDSSample/ViewControllers/TitleLockupViewController.swift @@ -51,7 +51,7 @@ class TitleLockupViewController: BaseViewController { setupModel() } - override func allTextFields() -> [UITextField]? { [eyebrowTextField, titleTextField, subTitleTextField] } + override func allTextFields() -> [TextField]? { [eyebrowTextField, titleTextField, subTitleTextField] } func setupForm(){ addFormRow(label: "Surface", view: surfacePickerSelectorView) diff --git a/VDSSample/ViewControllers/ToggleViewController.swift b/VDSSample/ViewControllers/ToggleViewController.swift index aaa5b6e..6bd5e63 100644 --- a/VDSSample/ViewControllers/ToggleViewController.swift +++ b/VDSSample/ViewControllers/ToggleViewController.swift @@ -52,7 +52,7 @@ class ToggleViewController: BaseViewController { setupPicker() } - override func allTextFields() -> [UITextField]? { [onTextField, offTextField] } + override func allTextFields() -> [TextField]? { [onTextField, offTextField] } func setupForm() {