Как изменить порядок чтения UIAccessibilityElements VoiceOver?

На SO есть 2 ответа по этому поводу, но ни один из них больше не работает.

У меня есть собственный UITableViewCell. На эту ячейку нанесены различные метки. VoiceOver for Accessibility читает текст слева направо и сверху вниз.

Это проблема для макета моей ячейки. Мне нужно, чтобы вещи читались в определенном порядке.

Однако мне кажется, что я не могу изменить порядок, в котором VoiceOver читает что-то по умолчанию.

Например, я пробовал self.accessibilityElements = @[self.view5, self.view1, self.view9], но это не меняет порядок.


person chris P    schedule 10.11.2015    source источник


Ответы (2)


Вы можете установить метку доступности ячейки с помощью строки, которую вы создаете, объединяя все подпредставления ячейки, например, если у вас есть lbl1, lbl2, lbl3, btn1:

    NSString *cellAccessibilityString = [NSString stringWithFormat:@"%@,%@,%@,%@", _lbl3.text, _lbl2.text, _btn1.text, _lbl1.text];
    [self setAccessibilityLabel:cellAccessibilityString];

Где я — это клетка.

person Vadim F.    schedule 16.02.2021

Нет, озвучка так не работает. Вы не можете изменить порядок элементов специальных возможностей. Вы можете пропустить только некоторые элементы, которые находятся в стеке.

Допустим, у вас есть представления от 1 до 9 в вертикальной компоновке.

и вы делаете это:

     self.accessibilityElements = @[self.view5, self.view1, self.view9]

Это не означает, что доступность сначала будет читать представление 5, затем представление 1, а затем представление 9.

Вы должны отдать такой приказ:

      self.accessibilityElements = @[self.view1, self.view5, self.view9]

Так что озвучка только читает их в порядке 1,5,9, и пропускает ремиан!!!!

Снова голос за кадром читает в порядке слева направо и сверху вниз!!!

Подумайте об этом так: ИСПОЛЬЗУЙТЕ self.accessibilityElements, только если вы хотите добавить/пропустить доступность для элементов в вашем представлении, но не для порядка доступности!!!

person Teja Nandamuri    schedule 10.11.2015
comment
Я предполагаю, что это намеренно Apple? Не разрешать изменение порядка элементов доступности? Голос за кадром считывает LtoR, TtoB, стандартизированные для всех представлений, чтобы те, кто использует VoiceOver, точно понимали, где находится элемент в заданном пространстве. Это имеет смысл, так как Apple HIG полон таких стандартов, которым необходимо следовать. Однако мне любопытно. Что вы думаете об этом ответе? > stackoverflow.com/questions/13279498/) на этот вопрос? Звучит так, как будто это можно сделать, но с количеством обходных путей, которые для этого требуются, звучит так, как будто это... - person chris P; 11.11.2015
comment
Я видел тестирование доступности много раз. Каждый раз фокус доступности должен быть сверху вниз и слева направо. Если вы измените порядок фокусировки, слепые люди могут запутаться. Они всегда считают, что фокус будет перемещаться слева направо и сверху вниз. Хотя у меня появилась идея изменить порядок фокуса, меня не поощряли к реализации такого поведения. - person Teja Nandamuri; 11.11.2015
comment
Если вы не ориентируетесь на слепых людей, вы можете попробовать это. Я попытаюсь реализовать это решение и посмотреть, действительно ли оно работает или нет. Я вернусь позже и обновлю ответ результатами - person Teja Nandamuri; 11.11.2015
comment
какие-нибудь хорошие выводы? Ячейка, на которой я хочу это сделать, не активна. Пользователь не может взаимодействовать ни с одним из конкретных элементов. Это буквально просто ячейка стиля context/view/readonly. Было бы хорошо, если бы что-то читалось в определенном порядке для этой конкретной ячейки. - person chris P; 12.11.2015