iOS辅助功能 - 有没有办法告诉VoiceOver何时更改了焦点?

时间:2015-04-21 03:55:52

标签: ios voiceover uiaccessibility

我希望每次在VoiceOver处于活动状态时聚焦不同的元素时调用方法。我希望这会有一些UIAccessibilityNotification,但我似乎无法找到。

最终,我的目标是在阅读辅助功能标签之前添加其他条件。例如,而不是说(默认情况下)"如果UIButton成为焦点:阅读标签",我希望能够说出"何时{{1} }变得专注且UIButton的背景颜色为蓝色:读取标签"。

所以我的问题是:如何在阅读标签之前添加其他条件,或者在新元素聚焦时收到通知?

2 个答案:

答案 0 :(得分:2)

您无法明确告知用户何时移动VoiceOver光标(就像您可以告诉有视力的用户所在的位置一样)。

对于您想要的行为,您有两种选择:

  1. 每当其他条件发生变化时,将按钮的accessibilityLabel设置为适当的值。
  2. 子类UIButton并覆盖其accessibilityLabel getter方法:

    - (NSString *) accessibilityLabel {
        if (SOME_CONDITION) {
            return @"Hooray!";
        } else {
            return @"Womp womp";
        }
    }
    
  3. 如果您需要完全停用某个项目,而不是返回nil或空字符串,则应将其accessibilityElementsHidden属性设置为YES

答案 1 :(得分:0)

您可以使用UIAccessibilityFocus协议来检测辅助功能客户端(包括VoiceOver)的焦点变化。请注意,UIAccessibilityFocus是一个非正式协议,每个辅助功能元素必须独立实现。

也就是说,对于您的用例,Aaron建议在每种情况下返回不同的accessibilityLabel