Элементы управления VoiceOver можно выбрать, когда они скрыты

У меня есть UIView, который содержит некоторые элементы управления (например, кнопки, ярлыки и т. Д.). Я накладываю это представление на другое представление (используя addSubview). Если у пользователя включен VoiceOver, он может проводить пальцем влево и вправо, чтобы выбрать элементы управления. Однако, если я скрою представление, чтобы элементы управления больше не были видны, пользователь по-прежнему может пролистывать и выбирать их (хотя на самом деле они не работают). Поскольку это очень сбивает с толку слепого пользователя, я бы хотел, чтобы этого не происходило. Я даже попытался удалить представление, содержащее элементы управления (используя removeFromSuperview), но пользователь ВСЕГДА может провести пальцем, чтобы выбрать их (хотя маленькие прямоугольники, которые их выделяют, больше не находятся в правильных положениях). VoiceOver как будто запомнил, что эти элементы управления когда-то были, и запомнит это навсегда.

Я также нашел свойство accessibilityElementsHidden и попытался установить для него значение YES в представлении, которое содержит элементы управления, когда оно скрыто, но это тоже не работает.

Это ошибка VoiceOver или я что-то упускаю? Есть ли обходной путь?

Спасибо.


person John Gaby    schedule 13.01.2012    source источник
comment
У меня как раз обратная проблема! Если мой вид наложения (содержащий кнопки) прозрачен (альфа = 0,0), то VoiceOver не обнаружит ни одного из его подвидов (кнопок и т. Д.). В моем случае я бы хотел, чтобы эти элементы управления были доступны (через VoiceOver), даже когда наложение скрыто, но я не могу !!!   -  person Motti Shneor    schedule 11.12.2016


Ответы (2)


«Запомненная» часть заставляет меня думать, что вы не делаете что-то вроде UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil) после удаления вложенных представлений.

person David Dunham    schedule 13.01.2012
comment
Да, именно этого мне не хватало. Большое спасибо! Кстати, я задал тот же вопрос на форуме разработчиков Apple и не получил ответа. Кажется, я всегда нахожу более знающих людей в stackoverflow. - person John Gaby; 13.01.2012
comment
Я тоже стараюсь отвечать на вопросы, просто на всякий случай. Кстати, если вам может потребоваться iOS 5, вы можете иметь модальные представления VoiceOver, которые могут сделать жизнь НАМНОГО проще. - person David Dunham; 13.01.2012
comment
Спасибо за совет. Я видел это, но я хочу иметь возможность поддерживать iPod Gen 2/3, который, похоже, имеет 4.2 в качестве максимальной версии, которую вы можете установить (я полагаю, я всегда мог бы проверить версию ОС и сделать или не сделать iOS 5 звонков соответственно). - person John Gaby; 16.01.2012
comment
Я использую модальность на iOS 5 и стараюсь изо всех сил на 4.x. - person David Dunham; 16.01.2012
comment
Спасибо за советы, Дэвид! Я предположил, что установка логического значения должна гарантировать, что Voiceover знает, что макет действительно изменился. интересно, почему это сделано, чтобы не работать (согласно моему предположению) - person Nitin Alabur; 30.10.2012
comment
@DavidDunham, не могли бы вы кое-что прояснить? В моем случае я не добавляю подвиды и не удаляю их. Скорее, я анимирую альфа-канал моего контейнера UIView (содержащий несколько кнопок) от 0,0 до 1,0 и наоборот. Это означает, что моя иерархия представлений никогда не меняется. VoiceOver по-прежнему не видит мои кнопки, когда они невидимы (в моем случае - я хочу, чтобы он нашел их, даже после того, как они исчезли). Вы хоть представляете связь между альфа-прозрачностью и доступностью? - person Motti Shneor; 12.12.2016
comment
@MottiShneor не знаю, потому что я обычно прячу предметы после того, как их потускнею. Предположительно основная идея заключается в том, что пользователи VoiceOver взаимодействуют с одним и тем же базовым пользовательским интерфейсом, и, поскольку вы не можете нажимать элементы alpha 0, они исключены из VoiceOver. Я полагаю, вы могли бы переместить их под что-то визуально непрозрачное или, возможно, переопределить accessibilityChildren в родительском элементе. Также возможно, что альфа 0,01 разрешит взаимодействие, но не видимость? Или переместите их так, чтобы на экране оставался только 1 пиксель? - person David Dunham; 12.12.2016

В документации для «accessibilityElementsHidden» говорится:

Логическое значение, указывающее, скрыты ли элементы специальных возможностей, содержащиеся в этом элементе доступности. ..... Значение по умолчанию для этого свойства - НЕТ. Вы можете использовать это свойство, чтобы скрыть представления, которые покрываются появлением нового представления. В этом случае скрытые представления могут оставаться видимыми на экране, но они не находятся в центре внимания действий пользователя.

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

Поэтому, исходя из этого, для того, чтобы VoiceOver игнорировала эти подпредставления, вам нужно установить для этого параметра значение «ДА» в родительском представлении.

person nickbona    schedule 13.01.2012
comment
Спасибо за ответ. Раньше я ошибался при вводе и устанавливал ДА. Проблема, похоже, в том, что я не звонил UIAccessibilityPostNotification после того, как удалил окна. - person John Gaby; 13.01.2012