From bcddc0b31145f6707ed5ac4be1f37aa2819c71b6 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Mon, 16 Dec 2019 08:53:45 -0500 Subject: [PATCH] Adjusted validation logic. --- .../TextFields/BaseDropdownEntryField.swift | 2 +- .../TextFields/DateDropdownEntryField.swift | 3 +- MVMCoreUI/Atoms/TextFields/DigitBox.swift | 4 +- .../Atoms/TextFields/DigitEntryField.swift | 38 +++++++++---------- .../TextFields/ItemDropdownEntryField.swift | 8 ++-- .../Atoms/TextFields/MdnEntryField.swift | 3 +- .../Atoms/TextFields/TextEntryField.swift | 5 ++- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/MVMCoreUI/Atoms/TextFields/BaseDropdownEntryField.swift b/MVMCoreUI/Atoms/TextFields/BaseDropdownEntryField.swift index d97d8943..e970be94 100644 --- a/MVMCoreUI/Atoms/TextFields/BaseDropdownEntryField.swift +++ b/MVMCoreUI/Atoms/TextFields/BaseDropdownEntryField.swift @@ -72,7 +72,7 @@ import UIKit } } -// MARK: - Molecular +// MARK: - MVMCoreUIMoleculeViewProtocol extension BaseDropdownEntryField { @objc override open func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { diff --git a/MVMCoreUI/Atoms/TextFields/DateDropdownEntryField.swift b/MVMCoreUI/Atoms/TextFields/DateDropdownEntryField.swift index 4838e459..274626c1 100644 --- a/MVMCoreUI/Atoms/TextFields/DateDropdownEntryField.swift +++ b/MVMCoreUI/Atoms/TextFields/DateDropdownEntryField.swift @@ -96,6 +96,7 @@ import UIKit } @objc override func dismissFieldInput(_ sender: Any?) { + setTextWith(date: datePicker?.date) super.dismissFieldInput(sender) } @@ -106,7 +107,7 @@ import UIKit } } -// MARK: - Molecular +// MARK: - MVMCoreUIMoleculeViewProtocol extension DateDropdownEntryField { @objc override open func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { diff --git a/MVMCoreUI/Atoms/TextFields/DigitBox.swift b/MVMCoreUI/Atoms/TextFields/DigitBox.swift index ffc1fa01..3ec3d4f1 100644 --- a/MVMCoreUI/Atoms/TextFields/DigitBox.swift +++ b/MVMCoreUI/Atoms/TextFields/DigitBox.swift @@ -79,7 +79,6 @@ import UIKit @objc public override init(frame: CGRect) { super.init(frame: frame) - setup() } @objc public convenience init() { @@ -95,7 +94,8 @@ import UIKit // MARK: - Lifecycle //-------------------------------------------------- - @objc private func setup() { + open override func setupView() { + super.setupView() guard constraints.isEmpty else { return } diff --git a/MVMCoreUI/Atoms/TextFields/DigitEntryField.swift b/MVMCoreUI/Atoms/TextFields/DigitEntryField.swift index fcd1d65c..876c2ed7 100644 --- a/MVMCoreUI/Atoms/TextFields/DigitEntryField.swift +++ b/MVMCoreUI/Atoms/TextFields/DigitEntryField.swift @@ -31,7 +31,6 @@ import UIKit public override var isEnabled: Bool { get { return super.isEnabled } set (enabled) { - titleLabel.textColor = enabled ? .mfBattleshipGrey() : .mfSilver() digitBoxes.forEach { $0.isEnabled = enabled } super.isEnabled = enabled } @@ -72,15 +71,11 @@ import UIKit // If there is already text in the textfield, set the placeholder label below. if let text = text, !text.isEmpty && !showError { feedback = placeholder + } else if !showError { feedback = "" } - /* - * adding missing accessibilityLabel value - * if we have some value in accessibilityLabel, - * then only can append regular and picker item - */ textField.accessibilityLabel = newValue + (MVMCoreUIUtility.hardcodedString(withKey: "mfdigittextfield_regular") ?? "") } } @@ -101,8 +96,6 @@ import UIKit field.digitField.text = String(newValue[indexChar]) } } - - valueChanged() } } @@ -128,9 +121,6 @@ import UIKit @objc public override init(frame: CGRect) { super.init(frame: frame) - - isAccessibilityElement = false - entryFieldContainer.disableAllBorders = true } @objc public convenience init() { @@ -156,7 +146,11 @@ import UIKit // MARK: - Setup //-------------------------------------------------- - @objc public override func setupFieldContainerContent(_ container: UIView) {} + @objc public override func setupFieldContainerContent(_ container: UIView) { + + isAccessibilityElement = false + entryFieldContainer.disableAllBorders = true + } @objc private func createDigitField() -> DigitBox { @@ -304,7 +298,6 @@ import UIKit } else { selectNextField = true } - } else if selectNextField { if !clear { switchFieldsAutomatically = true @@ -325,8 +318,12 @@ import UIKit @objc override open func resignFirstResponder() -> Bool { - selectedDigitBox?.digitField.resignFirstResponder() + if validateWhenDoneEditing { + validateTextField() + } + selectedDigitBox?.isSelected = false + selectedDigitBox?.digitField.resignFirstResponder() return true } @@ -369,14 +366,12 @@ extension DigitEntryField { // One character, switch old value with new, select next textfield textField.text = string - valueChanged() selectNextDigitField(textField, clear: false) return false } else if replacementLength == 0 && oldLength == 1 { // Non empty cell, clear and stay. textField.text = "" - valueChanged() return false } @@ -388,7 +383,7 @@ extension DigitEntryField { @objc func digitFieldDidDelete(_ textField: TextField?) { - selectPreviousDigitField(textField, clear: true) + selectPreviousDigitField(textField, clear: false) } @objc public func textFieldDidBeginEditing(_ textField: UITextField) { @@ -403,7 +398,6 @@ extension DigitEntryField { if !switchFieldsAutomatically { textField.text = "" - valueChanged() } proprietorTextDelegate?.textFieldDidBeginEditing?(textField) @@ -415,12 +409,16 @@ extension DigitEntryField { selectedDigitBox?.isSelected = false selectedDigitBox = nil + if !switchFieldsAutomatically && validateWhenDoneEditing { + validateTextField() + } + proprietorTextDelegate?.textFieldDidEndEditing?(textField) } @objc public func textFieldShouldClear(_ textField: UITextField) -> Bool { - selectPreviousDigitField(textField, clear: false) + selectPreviousDigitField(textField, clear: true) return proprietorTextDelegate?.textFieldShouldClear?(textField) ?? true } @@ -436,7 +434,7 @@ extension DigitEntryField { } } -// MARK: - Molecular +// MARK: - MVMCoreUIMoleculeViewProtocol extension DigitEntryField { @objc open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { diff --git a/MVMCoreUI/Atoms/TextFields/ItemDropdownEntryField.swift b/MVMCoreUI/Atoms/TextFields/ItemDropdownEntryField.swift index bf083af2..b07d90d6 100644 --- a/MVMCoreUI/Atoms/TextFields/ItemDropdownEntryField.swift +++ b/MVMCoreUI/Atoms/TextFields/ItemDropdownEntryField.swift @@ -34,7 +34,6 @@ open class ItemDropdownEntryField: BaseDropdownEntryField { @objc public override init(frame: CGRect) { super.init(frame: frame) - setup() } @objc public convenience init() { @@ -53,8 +52,9 @@ open class ItemDropdownEntryField: BaseDropdownEntryField { //-------------------------------------------------- // MARK: - Methods //-------------------------------------------------- - - @objc private func setup() { + + @objc open override func setupFieldContainerContent(_ container: UIView) { + super.setupFieldContainerContent(container) pickerView = MVMCoreUICommonViewsUtility.addPicker(to: textField, delegate: self) textField.hideBlinkingCaret = true @@ -115,7 +115,7 @@ extension ItemDropdownEntryField: UIPickerViewDelegate, UIPickerViewDataSource { } } -// MARK: - Molecular +// MARK: - MVMCoreUIMoleculeViewProtocol extension ItemDropdownEntryField { @objc override open func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { diff --git a/MVMCoreUI/Atoms/TextFields/MdnEntryField.swift b/MVMCoreUI/Atoms/TextFields/MdnEntryField.swift index 6911c8c7..3612f5a2 100644 --- a/MVMCoreUI/Atoms/TextFields/MdnEntryField.swift +++ b/MVMCoreUI/Atoms/TextFields/MdnEntryField.swift @@ -147,7 +147,7 @@ import MVMCore } text = unformattedMDN - _ = textFieldShouldReturn(textField) + textFieldShouldReturn(textField) textFieldDidEndEditing(textField) } } @@ -156,6 +156,7 @@ import MVMCore // MARK: - Implemented TextField Delegate //-------------------------------------------------- + @discardableResult @objc public func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() diff --git a/MVMCoreUI/Atoms/TextFields/TextEntryField.swift b/MVMCoreUI/Atoms/TextFields/TextEntryField.swift index 0f85c47f..16ff277a 100644 --- a/MVMCoreUI/Atoms/TextFields/TextEntryField.swift +++ b/MVMCoreUI/Atoms/TextFields/TextEntryField.swift @@ -228,7 +228,8 @@ import UIKit showError = true observingTextFieldDelegate?.isInvalid?(textfield: self) - } else if isValid { + } else { + showError = false observingTextFieldDelegate?.isValid?(textfield: self) } @@ -242,7 +243,7 @@ import UIKit textField.becomeFirstResponder() } - /// Executes on UITextField.textDidChangeNotification (every character entry) + /// Executes on UITextField.textDidChangeNotification (each character entry) @objc func valueChanged() { guard validateEachCharacter else { return }