Skip to content

Commit 29d694b

Browse files
matusklasovityXaferis
authored andcommitted
feat: Accessibility Identifier
1 parent e329931 commit 29d694b

File tree

3 files changed

+32
-25
lines changed

3 files changed

+32
-25
lines changed

GoodSwiftUI-Sample/GoodSwiftUI-Sample/Screens/InputFieldSampleView.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ extension InputFieldSampleView {
108108
InputField(text: $name, title: "Name", placeholder: "Jožko", hint: "Text is limited to 10 characters")
109109
// Override of default accessibility label
110110
.setAccessibilityLabel("Fill the name")
111+
// Accessibility identifier for UI tests
112+
.setAccessibilityIdentifier("nameTextField")
111113

112114
// "Continue" keyboard action button
113115
.inputFieldTraits(returnKeyType: .continue)
@@ -125,9 +127,6 @@ extension InputFieldSampleView {
125127
// Focus state binding to advance focus from keyboard action button (Continue)
126128
.bindFocusState($focusState, to: .name)
127129
.disabled(!nameEnabled)
128-
129-
// Accessibility identifier for UI tests
130-
.accessibilityIdentifier("nameTextField")
131130
}
132131

133132
private var pinCodeInputField: some View {
@@ -148,6 +147,9 @@ extension InputFieldSampleView {
148147

149148
// Setting accessibility labels for eye Button (secureField)
150149
.setEyeButtonAccessibilityLabel(showLabel: "Show PIN", hideLabel: "Hide PIN")
150+
151+
// Accessibility identifier for UI tests
152+
.setAccessibilityIdentifier("pinTextField")
151153

152154
// Custom validation criteria closure
153155
.validationCriteria {
@@ -167,9 +169,6 @@ extension InputFieldSampleView {
167169
.validityGroup($validityGroup)
168170
.bindFocusState($focusState, to: .pin)
169171
.disabled(!passwordEnabled)
170-
171-
// Accessibility identifier for UI tests
172-
.accessibilityIdentifier("pinTextField")
173172
}
174173

175174
private var percentFormattedInputField: some View {
@@ -200,7 +199,8 @@ extension InputFieldSampleView {
200199
hint: nil,
201200
leftView: {
202201
Text("+421 \(password)")
203-
.accessibilityHidden(true)
202+
.accessibilityLabel("Predvoľba")
203+
.accessibilityValue("+421 \(password)")
204204
},
205205
rightView: {
206206
Button {
@@ -213,8 +213,8 @@ extension InputFieldSampleView {
213213
}
214214
}
215215
)
216+
.setAccessibilityIdentifier("customViewsInputField")
216217
.alert("Right button alert", isPresented: $showsRightAlert, actions: {})
217-
.accessibilityIdentifier("customViewsInputField")
218218
}
219219

220220
private var validityGroups: some View {

Sources/GRInputField/SwiftUI/InputField.swift

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ public struct InputField<LeftView: View, RightView: View>: UIViewRepresentable {
4141
private var submitAction: MainClosure?
4242
private var resignAction: MainClosure?
4343
private var editingChangedAction: MainClosure?
44-
44+
45+
private var accessibilityIdentifier: String?
4546
private var accessibilityLabel: String?
4647
private var accessibilityValue: String?
4748
private var accessibilityHint: String?
@@ -67,7 +68,8 @@ public struct InputField<LeftView: View, RightView: View>: UIViewRepresentable {
6768
self.criteria = { Validator(criteria: [Criterion.alwaysValid]) }
6869
self.leftView = leftView
6970
self.rightView = rightView
70-
71+
72+
self.accessibilityIdentifier = self.title
7173
self.accessibilityLabel = self.title
7274
self.accessibilityValue = self.text
7375
self.accessibilityHint = self.hint
@@ -370,6 +372,7 @@ public struct InputField<LeftView: View, RightView: View>: UIViewRepresentable {
370372
// MARK: - Accessibility
371373

372374
func updateAccessibility(_ uiView: ValidableInputFieldView) {
375+
uiView.accessibilityIdentifier = accessibilityIdentifier
373376
uiView.accessibilityLabel = accessibilityLabel
374377
uiView.accessibilityHint = accessibilityHint
375378
uiView.accessibilityValue = accessibilityValue
@@ -460,7 +463,13 @@ public extension InputField {
460463
// MARK: - Accessibility
461464

462465
public extension InputField {
463-
466+
467+
func setAccessibilityIdentifier(_ identifier: String) -> Self {
468+
var modifiedSelf = self
469+
modifiedSelf.accessibilityIdentifier = identifier
470+
return modifiedSelf
471+
}
472+
464473
func setAccessibilityLabel(_ label: String) -> Self {
465474
var modifiedSelf = self
466475
modifiedSelf.accessibilityLabel = label

Sources/GRInputField/UIKit/InputFieldView.swift

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,15 @@ public class InputFieldView: UIView {
169169
private(set) public lazy var editingChangedPublisher = editingChangedSubject.eraseToAnyPublisher()
170170

171171
// MARK: - Accessibility
172-
172+
173+
public override var accessibilityIdentifier: String? {
174+
get {
175+
textField.accessibilityIdentifier
176+
} set {
177+
textField.accessibilityIdentifier = newValue
178+
}
179+
}
180+
173181
public override var accessibilityLabel: String? {
174182
get {
175183
textField.accessibilityLabel
@@ -466,6 +474,9 @@ private extension InputFieldView {
466474
eyeButton.accessibilityLabel = isSecure
467475
? showPasswordAccessibilityLabel
468476
: hidePasswordAccessibilityLabel
477+
eyeButton.accessibilityIdentifier = isSecure
478+
? "show"
479+
: "hide"
469480
}
470481

471482
func trimWhitespaceIfAllowed() {
@@ -773,16 +784,3 @@ private extension InputFieldView {
773784
}
774785

775786
}
776-
777-
// MARK: - Accessiblity
778-
//
779-
//private extension InputFieldView {
780-
//
781-
// func accessibilityAnnounceFailure {
782-
// guard let message else { return }
783-
//
784-
// DispatchQueue.main.async {
785-
// }
786-
// }
787-
//
788-
//}

0 commit comments

Comments
 (0)