diff --git a/MVMCoreUI/Atomic/Atoms/TextFields/DigitEntryField.swift b/MVMCoreUI/Atomic/Atoms/TextFields/DigitEntryField.swift index 25900f27..9d2c02cb 100644 --- a/MVMCoreUI/Atomic/Atoms/TextFields/DigitEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/TextFields/DigitEntryField.swift @@ -76,15 +76,6 @@ import UIKit public var digitBoxes: [DigitBox] = [] private var selectedDigitBox: DigitBox? - public lazy var errorImage: UIImageView = { - let image = MVMCoreUIUtility.imageNamed("alert_standard") - let imageView = UIImageView(image: image) - imageView.translatesAutoresizingMaskIntoConstraints = false - imageView.heightAnchor.constraint(equalToConstant: 20).isActive = true - imageView.widthAnchor.constraint(equalToConstant: 20).isActive = true - return imageView - }() - //-------------------------------------------------- // MARK: - Computed Properties //-------------------------------------------------- @@ -214,7 +205,6 @@ import UIKit isAccessibilityElement = false entryFieldContainer.disableAllBorders = true - usesAccessoryView = false } @objc private func createDigitField() -> DigitBox { diff --git a/MVMCoreUI/Atomic/Atoms/TextFields/TextEntryField.swift b/MVMCoreUI/Atomic/Atoms/TextFields/TextEntryField.swift index 98c03238..b267cd32 100644 --- a/MVMCoreUI/Atomic/Atoms/TextFields/TextEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/TextFields/TextEntryField.swift @@ -35,7 +35,22 @@ import UIKit textField.smartInsertDeleteType = .no return textField }() - + + private var standardAccessoryView: UIView? + + public var accessoryView: UIView? { + didSet { accessoryView == nil ? unconstrainAccessoryView() : constrainAccessoryView() } + } + + public lazy var errorImage: UIImageView = { + let image = MVMCoreUIUtility.imageNamed("alert_standard") + let imageView = UIImageView(image: image) + imageView.translatesAutoresizingMaskIntoConstraints = false + imageView.heightAnchor.constraint(equalToConstant: 20).isActive = true + imageView.widthAnchor.constraint(equalToConstant: 20).isActive = true + return imageView + }() + //-------------------------------------------------- // MARK: - Stored Properties //-------------------------------------------------- @@ -85,6 +100,17 @@ import UIKit textField.accessibilityValue = nil } + if textField.isSecureTextEntry { + if !error { + accessoryView?.removeFromSuperview() + accessoryView = nil + accessoryView = standardAccessoryView + } else { + standardAccessoryView = accessoryView + accessoryView = errorImage + } + } + super.showError = error } } @@ -137,6 +163,28 @@ import UIKit //-------------------------------------------------- public var textFieldTrailingConstraint: NSLayoutConstraint? + public var accessoryViewTrailingConstraint: NSLayoutConstraint? + + public func constrainAccessoryView() { + + guard let accessoryView = accessoryView else { return } + + entryFieldContainer.addSubview(accessoryView) + + textFieldTrailingConstraint?.isActive = false + textFieldTrailingConstraint = accessoryView.leadingAnchor.constraint(equalTo: textField.trailingAnchor, constant: Padding.Two) + textFieldTrailingConstraint?.isActive = true + + accessoryViewTrailingConstraint = entryFieldContainer.trailingAnchor.constraint(equalTo: accessoryView.trailingAnchor, constant: Padding.Four) + accessoryViewTrailingConstraint?.isActive = true + accessoryView.centerYAnchor.constraint(equalTo: entryFieldContainer.centerYAnchor).isActive = true + } + + public func unconstrainAccessoryView() { + + textFieldTrailingConstraint = entryFieldContainer.trailingAnchor.constraint(equalTo: textField.trailingAnchor, constant: Padding.Four) + textFieldTrailingConstraint?.isActive = true + } //-------------------------------------------------- // MARK: - Initializers @@ -185,6 +233,15 @@ import UIKit entryFieldContainer.addGestureRecognizer(tap) accessibilityElements = [titleLabel, textField, feedbackLabel] + + // TODO: Remove these two lines. + let tapErr = UITapGestureRecognizer(target: self, action: #selector(tapForError)) + titleLabel.addGestureRecognizer(tapErr) + } + + // TODO: Remove this func + @objc func tapForError() { + showError.toggle() } @objc open override func updateView(_ size: CGFloat) { @@ -337,46 +394,3 @@ extension TextEntryField { textField.accessibilityLabel = "\(accessibilityString) \(textField.isEnabled ? "" : MVMCoreUIUtility.hardcodedString(withKey: "textfield_disabled_state") ?? "")" } } - -// FOR isSecureEntry state -/* - - public var accessoryViewTrailingConstraint: NSLayoutConstraint? - - - // textFieldTrailingConstraint?.isActive = false - // textFieldTrailingConstraint = errorImage.leadingAnchor.constraint(equalTo: textField.trailingAnchor, constant: Padding.Two) - // textFieldTrailingConstraint?.isActive = true - // - // container.trailingAnchor.constraint(equalTo: errorImage.trailingAnchor, constant: Padding.Four).isActive = true - // errorImage.centerYAnchor.constraint(equalTo: container.centerYAnchor).isActive = true - - - public lazy var errorImage: UIImageView = { - let image = MVMCoreUIUtility.imageNamed("alert_standard") - let imageView = UIImageView(image: image) - imageView.translatesAutoresizingMaskIntoConstraints = false - imageView.heightAnchor.constraint(equalToConstant: 20).isActive = true - imageView.widthAnchor.constraint(equalToConstant: 20).isActive = true - return imageView - }() - - public func constrainAccessoryView() { - - entryFieldContainer.addSubview(errorImage) - - textFieldTrailingConstraint?.isActive = false - textFieldTrailingConstraint = errorImage.leadingAnchor.constraint(equalTo: textField.trailingAnchor, constant: Padding.Two) - textFieldTrailingConstraint?.isActive = true - - accessoryViewTrailingConstraint = entryFieldContainer.trailingAnchor.constraint(equalTo: errorImage.trailingAnchor, constant: Padding.Four) - accessoryViewTrailingConstraint?.isActive = true - errorImage.centerYAnchor.constraint(equalTo: entryFieldContainer.centerYAnchor).isActive = true - } - - public func unconstrainAccessoryView() { - - textFieldTrailingConstraint = entryFieldContainer.trailingAnchor.constraint(equalTo: textField.trailingAnchor, constant: Padding.Four) - textFieldTrailingConstraint?.isActive = true - } - */