From 2f6df89f0900dbd9fcdc627009f29d1a278f1752 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 10 May 2024 14:48:20 -0500 Subject: [PATCH] added focused state Signed-off-by: Matt Bruce --- .../DropdownSelect/DropdownSelect.swift | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/VDS/Components/DropdownSelect/DropdownSelect.swift b/VDS/Components/DropdownSelect/DropdownSelect.swift index aab62e19..febd3323 100644 --- a/VDS/Components/DropdownSelect/DropdownSelect.swift +++ b/VDS/Components/DropdownSelect/DropdownSelect.swift @@ -31,6 +31,18 @@ open class DropdownSelect: EntryFieldBase { //-------------------------------------------------- // MARK: - Public Properties //-------------------------------------------------- + /// Override UIControl state to add the .error state if showSuccess is true and if showError is true. + open override var state: UIControl.State { + get { + var state = super.state + if dropdownField.isFirstResponder { + state.insert(.focused) + } + + return state + } + } + /// If true, the label will be displayed inside the dropdown containerView. Otherwise, the label will be above the dropdown containerView like a normal text input. open var showInlineLabel: Bool = false { didSet { setNeedsUpdate() }} @@ -53,7 +65,7 @@ open class DropdownSelect: EntryFieldBase { /// A callback when the selected option changes. Passes parameters (option). open var onItemSelected: ((Int, DropdownOptionModel) -> Void)? - + //-------------------------------------------------- // MARK: - Private Properties //-------------------------------------------------- @@ -338,14 +350,22 @@ open class DropdownSelect: EntryFieldBase { titleLabelWidthConstraint?.constant = containerView.frame.width titleLabelWidthConstraint?.isActive = helperTextPlacement == .right } + + open override var canBecomeFirstResponder: Bool { true } + open override func resignFirstResponder() -> Bool { + if dropdownField.isFirstResponder { + dropdownField.resignFirstResponder() + } + return super.resignFirstResponder() + } } //-------------------------------------------------- // MARK: - UIPickerView Delegate & Datasource //-------------------------------------------------- extension DropdownSelect: UIPickerViewDelegate, UIPickerViewDataSource { - + internal func launchPicker() { if optionsPicker.isHidden { UIAccessibility.post(notification: .layoutChanged, argument: optionsPicker) @@ -354,6 +374,7 @@ extension DropdownSelect: UIPickerViewDelegate, UIPickerViewDataSource { dropdownField.resignFirstResponder() } optionsPicker.isHidden = !optionsPicker.isHidden + setNeedsUpdate() } public func numberOfComponents(in pickerView: UIPickerView) -> Int {