@IBOutlet weak var dataDisclosureView: UIStackView! // Main ContainerView
@IBOutlet private weak var titleLabel: UILabel! {
didSet {
titleLabel.text = "Hello"
}
}
@IBOutlet private weak var descriptionLabel: UILabel! {
didSet {
descriptionLabel.text = "World"
}
}
@IBOutlet weak var descriptionView: UIStackView! { // sub container view containing titleLabel and descriptionLabel
didSet {
descriptionView.isAccessibilityElement = true
descriptionView.accessibilityLabel = "Hello"
descriptionView.accessibilityIdentifier = "test_hello"
}
}
@IBOutlet private weak var requestButton: UIButton! {
didSet {
requestButton.isAccessibilityElement = true
requestButton.accessibilityLabel = "Request Button"
requestButton.accessibilityIdentifier = "test_button"
}
}
override func viewDidLoad() {
super.viewDidLoad()
dataDisclosureView.isAccessibilityElement = false
dataDisclosureView.accessibilityElements = [ descriptionView ?? "" ]
if #available(iOS 17.0, *) {
dataDisclosureView.automationElements = [ descriptionView ?? "",
requestButton ?? ""]
} else {
// Fallback on earlier versions
}
let requestButtonAction = UIAccessibilityCustomAction(name: "start",
target: self,
selector: #selector( request))
dataDisclosureView.accessibilityCustomActions = [ requestButtonAction ]
}
Моя проблема в том, что мне нужны идентификаторы AccessibilityIdentifers дляdescriptionLabel, titleLabel, requestButton иhintLabel(для автоматизации), а также метки доступности дляdescriptionView. и requestButton (доступность VoiceOver).
Но я не могу увидеть accessibilityIdentifier для Button, TitleLabel иdescriptionLabel в AccessibilityInspector. что я здесь делаю не так?
PS: Я также следил за видео ниже:
https://www.youtube.com/watch?v =IAqzXI3kFCk
Это рабочее решение
dataDisclosureView.accessibilityElements = [dataDisclosureView as Any,
titleLabel as Any,
descriptionLabel as Any,
requestButton as Any,
hintLabel as Any]
if #available(iOS 17.0, *) {
dataDisclosureView.automationElements = [titleLabel as Any,
descriptionLabel as Any,
requestButton as Any,
hintLabel as Any]
} else {
// Fallback on earlier versions
}
но меня это не устраивает, потому что в одном из видеороликов Apple WWDC упоминалось, что если мы хотим освободить элемент от голосовой доступности, не добавляйте его в accessibilityItems, и если мы хотим, элементы автоматизации просто добавьте его. Более подробной информации они не предоставили. Ссылка , а также добавление скриншота того, что я говорю
По этому так и должно быть
dataDisclosureView.accessibilityElements = [dataDisclosureView as Any,
titleLabel as Any,
descriptionLabel as Any,
requestButton as Any]
if #available(iOS 17.0, *) {
dataDisclosureView.automationElements = [titleLabel as Any,
descriptionLabel as Any,
requestButton as Any,
hintLabel as Any]
} else {
// Fallback on earlier versions
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... swift-uiki
Мобильная версия