CXTDT-553663 - DropdownSelect - Accessibility - 5 issues
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
6236184481
commit
fb23a411b9
@ -103,8 +103,6 @@ open class DropdownSelect: EntryFieldBase {
|
|||||||
open override func setup() {
|
open override func setup() {
|
||||||
super.setup()
|
super.setup()
|
||||||
|
|
||||||
accessibilityLabel = "Dropdown Select"
|
|
||||||
|
|
||||||
// stackview for controls in EntryFieldBase.controlContainerView
|
// stackview for controls in EntryFieldBase.controlContainerView
|
||||||
let controlStackView = UIStackView().with {
|
let controlStackView = UIStackView().with {
|
||||||
$0.translatesAutoresizingMaskIntoConstraints = false
|
$0.translatesAutoresizingMaskIntoConstraints = false
|
||||||
@ -118,6 +116,10 @@ open class DropdownSelect: EntryFieldBase {
|
|||||||
controlStackView.addArrangedSubview(inlineDisplayLabel)
|
controlStackView.addArrangedSubview(inlineDisplayLabel)
|
||||||
controlStackView.addArrangedSubview(selectedOptionLabel)
|
controlStackView.addArrangedSubview(selectedOptionLabel)
|
||||||
|
|
||||||
|
containerStackView.isAccessibilityElement = true
|
||||||
|
containerStackView.accessibilityLabel = "Dropdown Select"
|
||||||
|
inlineDisplayLabel.isAccessibilityElement = true
|
||||||
|
|
||||||
controlStackView.setCustomSpacing(0, after: dropdownField)
|
controlStackView.setCustomSpacing(0, after: dropdownField)
|
||||||
controlStackView.setCustomSpacing(VDSLayout.space1X, after: inlineDisplayLabel)
|
controlStackView.setCustomSpacing(VDSLayout.space1X, after: inlineDisplayLabel)
|
||||||
controlStackView.setCustomSpacing(VDSLayout.space3X, after: selectedOptionLabel)
|
controlStackView.setCustomSpacing(VDSLayout.space3X, after: selectedOptionLabel)
|
||||||
@ -245,9 +247,41 @@ open class DropdownSelect: EntryFieldBase {
|
|||||||
statusIcon.color = iconColorConfiguration.getColor(self)
|
statusIcon.color = iconColorConfiguration.getColor(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open override func updateAccessibility() {
|
||||||
|
super.updateAccessibility()
|
||||||
|
var selectedOption = selectedOptionLabel.text ?? ""
|
||||||
|
containerStackView.accessibilityLabel = "Dropdown Select, \(selectedOption) \(isReadOnly ? ", read only" : "")"
|
||||||
|
containerStackView.accessibilityHint = isReadOnly || !isEnabled ? "" : "Double tap to open."
|
||||||
|
}
|
||||||
|
|
||||||
|
open override var accessibilityElements: [Any]? {
|
||||||
|
get {
|
||||||
|
var elements = [Any]()
|
||||||
|
elements.append(contentsOf: [titleLabel, containerStackView])
|
||||||
|
|
||||||
|
if showError {
|
||||||
|
elements.append(statusIcon)
|
||||||
|
if let errorText, !errorText.isEmpty {
|
||||||
|
elements.append(errorLabel)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if let helperText, !helperText.isEmpty {
|
||||||
|
elements.append(helperLabel)
|
||||||
|
}
|
||||||
|
|
||||||
|
return elements
|
||||||
|
}
|
||||||
|
|
||||||
|
set { super.accessibilityElements = newValue }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@objc open func pickerDoneClicked() {
|
@objc open func pickerDoneClicked() {
|
||||||
optionsPicker.isHidden = true
|
optionsPicker.isHidden = true
|
||||||
dropdownField.resignFirstResponder()
|
dropdownField.resignFirstResponder()
|
||||||
|
setNeedsUpdate()
|
||||||
|
UIAccessibility.post(notification: .layoutChanged, argument: containerStackView)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,6 +292,7 @@ extension DropdownSelect: UIPickerViewDelegate, UIPickerViewDataSource {
|
|||||||
|
|
||||||
internal func launchPicker() {
|
internal func launchPicker() {
|
||||||
if optionsPicker.isHidden {
|
if optionsPicker.isHidden {
|
||||||
|
UIAccessibility.post(notification: .layoutChanged, argument: optionsPicker)
|
||||||
dropdownField.becomeFirstResponder()
|
dropdownField.becomeFirstResponder()
|
||||||
} else {
|
} else {
|
||||||
dropdownField.resignFirstResponder()
|
dropdownField.resignFirstResponder()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user