#ios #swift #accessibility #voiceover
#iOS #swift #Специальные возможности #голос за кадром
Вопрос:
Я использую UIAccessibilityElement для инкапсуляции информации из нескольких меток и кнопок в пользовательскую UITableViewCell. Когда голос за кадром включен и пользователь проводит пальцем по каждому элементу, я хочу, чтобы определенные элементы были сгруппированы вместе. Например, вместо того, чтобы произносить «Любимое блюдо», пользователь должен снова провести пальцем, чтобы услышать «Пицца», он будет произносить «Любимое блюдо, пицца».
В моей подклассовой ячейке это работает путем переопределения accessibilityElements. Однако у меня возникает проблема, когда я добавляю UIButton в accessibilityElements. В приведенном ниже коде я создаю viewProfileButtonAccessibilityElement. Я добавляю ярлык доступности и признак .кнопка. При произнесении голосом за кадром он говорит «Кнопка просмотра изображения профиля одна из одной». Я не могу понять, откуда берется «один из одного». Есть идеи, что заставляет голос за кадром добавлять «один из одного» после произнесения слова button?
private var cachedAccessiblityElements: [Any]?
override var accessibilityElements: [Any]? {
set {
cachedAccessiblityElements = newValue
}
get {
// Return the acessibility elements if we've already created them
if let cachedAccessiblityElements = cachedAccessiblityElements {
return cachedAccessiblityElements
}
var elements = [UIAccessibilityElement]()
if let favoriteFoodTitle = favoriteFoodTitle.text, let favoriteFood = favoriteFood.text {
let favoriteFoodAccessibilityElement = UIAccessibilityElement(accessibilityContainer: self)
favoriteFoodAccessibilityElement.accessibilityLabel = favoriteFoodTitle " " favoriteFood
favoriteFoodAccessibilityElement.accessibilityFrameInContainerSpace = self.favoriteFoodTitle.frame.union(self.favoriteFood.frame)
elements.append(favoriteFoodAccessibilityElement)
}
let viewProfileButtonAccessibilityElement = UIAccessibilityElement(accessibilityContainer: self)
viewProfileButtonAccessibilityElement.accessibilityLabel = "View Profile Picture"
viewProfileButtonAccessibilityElement.accessibilityTraits = UIAccessibilityTraits.button
viewProfileButtonAccessibilityElement.accessibilityFrameInContainerSpace = self.viewProfileButton.frame
elements.append(viewProfileButtonAccessibilityElement)
cachedAccessiblityElements = elements
return cachedAccessiblityElements
}
}
Ответ №1:
Я не могу понять, откуда берется «один из одного». Есть идеи, что заставляет голос за кадром добавлять «один из одного» после произнесения слова button?
Каждая кнопка UIControl, которую вы создаете в ячейке с .button
признаком, будет озвучена так, как вы упомянули.
Независимо от количества созданных кнопок в tableviewcell, все они будут озвучены одним и тем же суффиксом, указывающим ячейку, к которой они принадлежат, и общее количество ячеек в разделе.
«один из одного» в вашем примере означает, что ваша кнопка находится в первой ячейке и что у вас есть только одна ячейка в вашем разделе.
Например, если вы создадите две кнопки в третьей ячейке раздела, содержащего десять ячеек, вы услышите суффикс «три из десяти» для ваших двух кнопок.
Я надеюсь, что это объяснение достаточно четкое, чтобы понять, откуда взялось ваше «один из одного», как это требуется.