From c38e3c07122946eb525358889221e4e4878555a3 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Tue, 19 Nov 2019 09:57:43 -0500 Subject: [PATCH] DigitEntry in decent place. --- .../Atoms/TextFields/DigitEntryField.swift | 78 +++++++++---------- MVMCoreUI/Containers/views/FormView.swift | 43 +++++----- 2 files changed, 62 insertions(+), 59 deletions(-) diff --git a/MVMCoreUI/Atoms/TextFields/DigitEntryField.swift b/MVMCoreUI/Atoms/TextFields/DigitEntryField.swift index 5fae6aa9..5e049d48 100644 --- a/MVMCoreUI/Atoms/TextFields/DigitEntryField.swift +++ b/MVMCoreUI/Atoms/TextFields/DigitEntryField.swift @@ -17,14 +17,10 @@ import UIKit //-------------------------------------------------- private(set) var numberOfDigits = 4 - private var switchedAutomatically = false + public var switchFieldsAutomatically = false public var digitFields: [DigitBox] = [] - //-------------------------------------------------- - // MARK: - Properties - //-------------------------------------------------- - //-------------------------------------------------- // MARK: - Property Observers //-------------------------------------------------- @@ -133,12 +129,10 @@ import UIKit alignCenterHorizontal() isAccessibilityElement = false - entryContainer.hideBorder = true + entryContainer.hideBorders = true entryContainer.bottomBar.backgroundColor = UIColor.clear.cgColor entryContainer.bottomBar.frame = CGRect(x: 0, y: entryContainer.bounds.height, width: 0, height: 0) assembleDigitFieldsView(size: MVMCoreUISplitViewController.getDetailViewWidth()) - - textField.removeFromSuperview() } private func createDigitField() -> DigitBox { @@ -155,7 +149,11 @@ import UIKit var accessibleElements: [Any] = [titleLabel] if numberOfDigits > 0 { - let digitFields = [DigitBox](repeating: createDigitField(), count: numberOfDigits) + var digitFields = [DigitBox]() + for _ in 0.. [AnyHashable]? { + open class func getEnabledDigitFields(_ textFieldToDetermine: [TextEntryField]) -> [AnyHashable]? { - var enabledTextFields = [AnyHashable]() - - for textfield in textFieldToDetermine ?? [] { - if textfield.isEnabled { - enabledTextFields.append(textfield) - } - } - - return enabledTextFields + return textFieldToDetermine.filter { $0.isEnabled } } } @@ -316,12 +312,12 @@ extension DigitEntryField { // One character, switch old value with new, select next textfield textField.text = string - selectNextTextField(textField, clear: false) + selectNextDigitField(textField, clear: false) valueChanged() return false } else if replacementLength == 0 && oldLength == 1 { - // non empty cell, clear and stay. + // Non empty cell, clear and stay. textField.text = "" valueChanged() return false @@ -336,12 +332,12 @@ extension DigitEntryField { func textFieldDidDelete(_ textField: UITextField?) { // Empty cell, go back to previous cell and clear. - selectPreviousTextField(textField, clear: true) + selectPreviousDigitField(textField, clear: true) } @objc public func textFieldDidBeginEditing(_ textField: UITextField) { - if !switchedAutomatically { + if !switchFieldsAutomatically { textField.text = "" valueChanged() } @@ -356,7 +352,7 @@ extension DigitEntryField { @objc public func textFieldShouldClear(_ textField: UITextField) -> Bool { - selectPreviousTextField(textField, clear: false) + selectPreviousDigitField(textField, clear: false) return uiTextFieldDelegate?.textFieldShouldClear?(textField) ?? true } @@ -374,7 +370,7 @@ extension DigitEntryField { // MARK: - Molecular extension DigitEntryField { - + open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData) @@ -385,16 +381,16 @@ extension DigitEntryField { numberOfDigits = digits } + assembleDigitFieldsView(size: MVMCoreUIUtility.getWidth()) + if !dictionary.isEmpty{ for digitBox in digitFields { MVMCoreUICommonViewsUtility.addDismissToolbar(digitBox.digitField, delegate: delegateObject as? UITextFieldDelegate) } } - - assembleDigitFieldsView(size: MVMCoreUIUtility.getWidth()) } open override class func estimatedHeight(forRow json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?) -> CGFloat { - return 44 + return 115 } } diff --git a/MVMCoreUI/Containers/views/FormView.swift b/MVMCoreUI/Containers/views/FormView.swift index 201bfb3d..44a5c4b5 100644 --- a/MVMCoreUI/Containers/views/FormView.swift +++ b/MVMCoreUI/Containers/views/FormView.swift @@ -24,7 +24,7 @@ import UIKit }() /// Determines if a border should be drawn. - public var hideBorder = false + public var hideBorders = false public var borderStrokeColor: UIColor = .mfSilver() private var borderPath: UIBezierPath = UIBezierPath() @@ -35,13 +35,17 @@ import UIKit public var showError = false { didSet { - showError ? errorUI() : originalUI() + if !hideBorders { + showError ? errorUI() : originalUI() + } } } public var isEnabled = true { didSet { - isEnabled ? originalUI() : disabledUI() + if !hideBorders { + isEnabled ? originalUI() : disabledUI() + } } } @@ -53,7 +57,9 @@ import UIKit public var isSelected = false { didSet { - isSelected ? selectedUI() : originalUI() + if !hideBorders { + isSelected ? selectedUI() : originalUI() + } } } @@ -86,7 +92,7 @@ import UIKit borderPath.removeAllPoints() - if !hideBorder { + if !hideBorders { // Brings the other half of the line inside the view to prevent cropping. let origin = bounds.origin let size = frame.size @@ -117,7 +123,7 @@ import UIKit open func originalUI() { isUserInteractionEnabled = true - hideBorder = false + hideBorders = false borderStrokeColor = .mfSilver() bottomBar.backgroundColor = UIColor.black.cgColor refreshUI(bottomBarSize: 1) @@ -126,7 +132,7 @@ import UIKit open func errorUI() { isUserInteractionEnabled = true - hideBorder = false + hideBorders = false borderStrokeColor = .mfPumpkin() bottomBar.backgroundColor = UIColor.mfPumpkin().cgColor refreshUI(bottomBarSize: 4) @@ -135,7 +141,7 @@ import UIKit open func selectedUI() { isUserInteractionEnabled = true - hideBorder = false + hideBorders = false borderStrokeColor = .black bottomBar.backgroundColor = UIColor.black.cgColor refreshUI(bottomBarSize: 1) @@ -144,7 +150,7 @@ import UIKit open func lockedUI() { isUserInteractionEnabled = false - hideBorder = true + hideBorders = true borderStrokeColor = .clear bottomBar.backgroundColor = UIColor.clear.cgColor refreshUI(bottomBarSize: 1) @@ -154,19 +160,20 @@ import UIKit isUserInteractionEnabled = false borderStrokeColor = .mfSilver() - hideBorder = false bottomBar.backgroundColor = UIColor.mfSilver().cgColor refreshUI(bottomBarSize: 1) } open func refreshUI(bottomBarSize: CGFloat? = nil) { - let size: CGFloat = bottomBarSize ?? (showError ? 4 : 1) - bottomBar.frame = CGRect(x: 0, y: bounds.height - size, width: bounds.width, height: size) - - delegateObject?.moleculeDelegate?.moleculeLayoutUpdated?(self) - setNeedsDisplay() - layoutIfNeeded() + if !hideBorders { + let size: CGFloat = bottomBarSize ?? (showError ? 4 : 1) + bottomBar.frame = CGRect(x: 0, y: bounds.height - size, width: bounds.width, height: size) + + delegateObject?.moleculeDelegate?.moleculeLayoutUpdated?(self) + setNeedsDisplay() + layoutIfNeeded() + } } //-------------------------------------------------- @@ -179,8 +186,8 @@ import UIKit guard let dictionary = json, !dictionary.isEmpty else { return } - if let hideBorder = dictionary["hideBorder"] as? Bool { - self.hideBorder = hideBorder + if let hideBorders = dictionary["hideBorders"] as? Bool { + self.hideBorders = hideBorders } } }