diff --git a/MVMCoreUI/Atomic/Atoms/TextFields/DigitEntryField.swift b/MVMCoreUI/Atomic/Atoms/TextFields/DigitEntryField.swift index 27b985ce..091f9e51 100644 --- a/MVMCoreUI/Atomic/Atoms/TextFields/DigitEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/TextFields/DigitEntryField.swift @@ -211,7 +211,7 @@ import UIKit let digitBox = DigitBox() digitBox.isAccessibilityElement = true - MVMCoreUICommonViewsUtility.addDismissToolbar(digitBox.digitField, delegate: self) + digitBox.digitField.inputAccessoryView = MVMCoreUICommonViewsUtility.getToolbarWithDoneButton(delegate: self) digitBox.digitField.delegate = self digitBox.digitBoxDelegate = self return digitBox @@ -333,12 +333,10 @@ import UIKit } public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { - - + guard let model = model as? DigitEntryFieldModel else { return } numberOfDigits = model.digits - setAsSecureTextEntry(model.secureEntry) for digitBox in digitBoxes { diff --git a/MVMCoreUI/Atomic/Atoms/TextFields/EntryField.swift b/MVMCoreUI/Atomic/Atoms/TextFields/EntryField.swift index a0f0e7dc..a02f87ee 100644 --- a/MVMCoreUI/Atomic/Atoms/TextFields/EntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/TextFields/EntryField.swift @@ -116,8 +116,7 @@ import UIKit set (newFeedback) { feedbackLabel.text = newFeedback feedbackLabel.accessibilityElementsHidden = feedbackLabel.text?.isEmpty ?? true - entryFieldContainer.refreshUI() - delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self) + entryFieldContainer.refreshUI(updateMoleculeLayout: true) } } diff --git a/MVMCoreUI/Atomic/Atoms/TextFields/TextEntryField.swift b/MVMCoreUI/Atomic/Atoms/TextFields/TextEntryField.swift index 2ef6f292..9614b615 100644 --- a/MVMCoreUI/Atomic/Atoms/TextFields/TextEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/TextFields/TextEntryField.swift @@ -49,6 +49,10 @@ import UIKit /// Validate when user resigns editing. Default: true public var validateWhenDoneEditing: Bool = true + + public var textEntryFieldModel: TextEntryFieldModel? { + return model as? TextEntryFieldModel + } //-------------------------------------------------- // MARK: - Computed Properties @@ -87,7 +91,7 @@ import UIKit get { return textField.text } set { textField.text = newValue - (model as? TextEntryFieldModel)?.text = newValue + textEntryFieldModel?.text = newValue } } @@ -171,7 +175,8 @@ import UIKit textField.heightAnchor.constraint(equalToConstant: 24), textField.topAnchor.constraint(equalTo: container.topAnchor, constant: 12), textField.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 16), - container.bottomAnchor.constraint(equalTo: textField.bottomAnchor, constant: 12)]) + container.bottomAnchor.constraint(equalTo: textField.bottomAnchor, constant: 12) + ]) textFieldTrailingConstraint = container.trailingAnchor.constraint(equalTo: textField.trailingAnchor, constant: 16) textFieldTrailingConstraint?.isActive = true diff --git a/MVMCoreUI/BaseControllers/ViewController.swift b/MVMCoreUI/BaseControllers/ViewController.swift index 7a3446d2..c345f458 100644 --- a/MVMCoreUI/BaseControllers/ViewController.swift +++ b/MVMCoreUI/BaseControllers/ViewController.swift @@ -33,7 +33,7 @@ import UIKit /// Checks if the screen width has changed open func screenSizeChanged() -> Bool { - return MVMCoreGetterUtility.cgfequalwiththreshold(previousScreenSize.width, view.bounds.size.width, 0.1) + return !MVMCoreGetterUtility.cgfequalwiththreshold(previousScreenSize.width, view.bounds.size.width, 0.1) } // MARK: - Response handling @@ -276,17 +276,18 @@ import UIKit open override func viewDidLayoutSubviews() { // Add to fix a constraint bug where the width is zero and things get messed up. - guard isViewLoaded, - view.bounds.width > 1 else { - super.viewDidLayoutSubviews() - return + guard isViewLoaded, view.bounds.width > 1 else { + super.viewDidLayoutSubviews() + return } + if needsUpdateUI || screenSizeChanged() { updateViews() needsUpdateUI = false } + previousScreenSize = view.bounds.size; - + super.viewDidLayoutSubviews() } diff --git a/MVMCoreUI/Containers/Views/EntryFieldContainer.swift b/MVMCoreUI/Containers/Views/EntryFieldContainer.swift index eae81741..c7e5c3a7 100644 --- a/MVMCoreUI/Containers/Views/EntryFieldContainer.swift +++ b/MVMCoreUI/Containers/Views/EntryFieldContainer.swift @@ -260,13 +260,21 @@ import UIKit refreshUI(bottomBarSize: 1) } - open func refreshUI(bottomBarSize: CGFloat? = nil) { + open func refreshUI(bottomBarSize: CGFloat? = nil, updateMoleculeLayout: Bool = false) { if !disableAllBorders { let size: CGFloat = bottomBarSize ?? (showError ? 4 : 1) + var heightChanged = false + + if let bottomHeight = bottomBar?.bounds.height { + heightChanged = size != bottomHeight + } bottomBar?.frame = CGRect(x: 0, y: bounds.height - size, width: bounds.width, height: size) - delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self) + if updateMoleculeLayout || heightChanged { + delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self) + } + setNeedsDisplay() layoutIfNeeded() } diff --git a/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility+Extension.swift b/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility+Extension.swift index 70c84d40..3ee452b0 100644 --- a/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility+Extension.swift +++ b/MVMCoreUI/Utility/MVMCoreUICommonViewsUtility+Extension.swift @@ -9,12 +9,15 @@ import Foundation public extension MVMCoreUICommonViewsUtility { + static func getToolbarWithDoneButton(delegate: ObservingTextFieldDelegate) -> UIToolbar { + let toolbar = self.makeEmptyToolbar() let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) let button = UIBarButtonItem(barButtonSystemItem: .done, target: delegate, action: #selector(ObservingTextFieldDelegate.dismissFieldInput(sender:))) button.tintColor = .black toolbar.setItems([space, button], animated: false) + return toolbar } }