From 3efe4ae81f0b52e1a7cdab237b8ae36f911a369c Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Thu, 11 Feb 2021 16:09:38 -0500 Subject: [PATCH] continues development --- .../BaseDropdownEntryField.swift | 2 +- .../BaseItemPickerEntryField.swift | 32 ++++++++++++++- .../ItemDropdownEntryField.swift | 39 +++---------------- .../MultiItemDropdownEntryField.swift | 31 ++++----------- .../MultiItemDropdownEntryFieldModel.swift | 15 +++++-- .../FormUIHelpers/FormFieldProtocol.swift | 3 +- 6 files changed, 59 insertions(+), 63 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/BaseDropdownEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/BaseDropdownEntryField.swift index 60808590..5a7f1702 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/BaseDropdownEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/BaseDropdownEntryField.swift @@ -87,7 +87,7 @@ import UIKit dropDownCaretView.setOptional(with: model.caretView, delegateObject, additionalData) } - public override func dismissFieldInput(_ sender: Any?) { + @objc public override func dismissFieldInput(_ sender: Any?) { performDropdownAction() super.dismissFieldInput(sender) } diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/BaseItemPickerEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/BaseItemPickerEntryField.swift index e3b37b7b..2c74abdb 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/BaseItemPickerEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/BaseItemPickerEntryField.swift @@ -8,7 +8,10 @@ import UIKit -open class BaseItemPickerEntryField: BaseDropdownEntryField { +public typealias TextFieldAndPickerDelegate = (UITextFieldDelegate & UIPickerViewDelegate & UIPickerViewDataSource) + + +open class BaseItemPickerEntryField: BaseDropdownEntryField, UIPickerViewDelegate, UIPickerViewDataSource { //-------------------------------------------------- // MARK: - Outlets //-------------------------------------------------- @@ -27,4 +30,31 @@ open class BaseItemPickerEntryField: BaseDropdownEntryField { /// When selecting for first responder, allow initial selected value to appear in empty text field. public var setInitialValueInTextField = true + + //-------------------------------------------------- + // MARK: - Methods + //-------------------------------------------------- + + @objc open override func setupFieldContainerContent(_ container: UIView) { + super.setupFieldContainerContent(container) + + pickerView = UIPickerView.addPicker(to: self.textField, delegate: self, dismissAction: #selector(dismissFieldInput)) + textField.hideBlinkingCaret = true + textField.autocorrectionType = .no + uiTextFieldDelegate = self + } + + @objc public func setPickerDelegates(delegate: UIPickerViewDelegate & UIPickerViewDataSource) { + + pickerView?.delegate = delegate + pickerView?.dataSource = delegate + } + + //-------------------------------------------------- + // MARK: - Picker Delegate to Override + //-------------------------------------------------- + + public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 0 } + + public func numberOfComponents(in pickerView: UIPickerView) -> Int { 0 } } diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift index 2b0a4201..938e6a20 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift @@ -8,25 +8,13 @@ import UIKit -public typealias TextFieldAndPickerDelegate = (UITextFieldDelegate & UIPickerViewDelegate & UIPickerViewDataSource) - -open class ItemDropdownEntryField: BaseDropdownEntryField { +open class ItemDropdownEntryField: BaseItemPickerEntryField { //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- open var pickerData: [String] = [] - open var pickerView: UIPickerView? - - /// When selecting for first responder, allow initial selected value to appear in empty text field. - public var setInitialValueInTextField = true - - /// Closure passed here will run as picker changes items. - public var observeDropdownChange: ((String, String)->())? - - /// Closure passed here will run upon dismissing the selection picker. - public var observeDropdownSelection: ((String)->())? public var itemDropdownEntryFieldModel: ItemDropdownEntryFieldModel? { model as? ItemDropdownEntryFieldModel @@ -61,21 +49,6 @@ open class ItemDropdownEntryField: BaseDropdownEntryField { // MARK: - Methods //-------------------------------------------------- - @objc open override func setupFieldContainerContent(_ container: UIView) { - super.setupFieldContainerContent(container) - - pickerView = UIPickerView.addPicker(to: textField, delegate: self, dismissAction: #selector(dismissFieldInput)) - textField.hideBlinkingCaret = true - textField.autocorrectionType = .no - uiTextFieldDelegate = self - } - - @objc public func setPickerDelegates(delegate: UIPickerViewDelegate & UIPickerViewDataSource) { - - pickerView?.delegate = delegate - pickerView?.dataSource = delegate - } - /// Sets the textField with the first value of the available picker data. @objc private func setInitialValueFromPicker() { @@ -116,14 +89,14 @@ open class ItemDropdownEntryField: BaseDropdownEntryField { self.pickerView(pickerView, didSelectRow: index, inComponent: 0) } } -} -// MARK:- Base Picker Delegate -extension ItemDropdownEntryField: UIPickerViewDelegate, UIPickerViewDataSource { + //-------------------------------------------------- + // MARK: - Picker Delegate + //-------------------------------------------------- - @objc public func numberOfComponents(in pickerView: UIPickerView) -> Int { 1 } + @objc public override func numberOfComponents(in pickerView: UIPickerView) -> Int { 1 } - @objc public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { + @objc public override func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { pickerData.count } diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/MultiItemDropdownEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/MultiItemDropdownEntryField.swift index 670a23e4..860cee6a 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/MultiItemDropdownEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/MultiItemDropdownEntryField.swift @@ -52,21 +52,6 @@ open class MultiItemDropdownEntryField: BaseItemPickerEntryField { // MARK: - Methods //-------------------------------------------------- - @objc open override func setupFieldContainerContent(_ container: UIView) { - super.setupFieldContainerContent(container) - - pickerView = UIPickerView.addPicker(to: textField, delegate: self, dismissAction: #selector(dismissFieldInput)) - textField.hideBlinkingCaret = true - textField.autocorrectionType = .no - uiTextFieldDelegate = self - } - - @objc public func setPickerDelegates(delegate: UIPickerViewDelegate & UIPickerViewDataSource) { - - pickerView?.delegate = delegate - pickerView?.dataSource = delegate - } - /// Sets the textField with the first value of the available picker data. @objc private func setInitialValueFromPicker() { @@ -75,7 +60,7 @@ open class MultiItemDropdownEntryField: BaseItemPickerEntryField { let rowText = dropdownModel?.selectedRowText else { return } -// observeDropdownChange?(text ?? "", rowText) + observeDropdownChange?(text ?? "", rowText) text = rowText for component in 0.. Int { componentCount } + @objc public override func numberOfComponents(in pickerView: UIPickerView) -> Int { componentCount } - @objc public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { + @objc public override func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { pickerComponents[component].count } @@ -150,7 +135,7 @@ extension MultiItemDropdownEntryField: UIPickerViewDelegate, UIPickerViewDataSou let rowText = dropdownModel?.selectedRowText else { return } -// observeDropdownChange?(text ?? "", rowText) + observeDropdownChange?(text ?? "", rowText) text = rowText dropdownModel?.selectedIndexes[component] = row } diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/MultiItemDropdownEntryFieldModel.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/MultiItemDropdownEntryFieldModel.swift index 0d8e7dcb..4c4a3eb6 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/MultiItemDropdownEntryFieldModel.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/MultiItemDropdownEntryFieldModel.swift @@ -18,6 +18,7 @@ import Foundation public var components: [[String]] = [[]] public var selectedIndexes: [Int: Int] = [:] + public var delimiters: [String]? //-------------------------------------------------- // MARK: - Validation @@ -37,6 +38,12 @@ import Foundation for i in 0..