iOS 辅助功能 - 有没有办法判断 VoiceOver 何时改变了焦点?
iOS Accessibility - is there a way to tell when VoiceOver has changed focus?
我想在 VoiceOver 处于活动状态时每次聚焦不同的元素时调用一个方法。我本来希望有一些 UIAccessibilityNotification
的,但我似乎找不到。
最终,我的目标是在阅读无障碍标签之前添加一个附加条件。例如,与说(默认)"If UIButton
becomes focused: read label" 相反,我希望能够说 "When UIButton
becomes focused AND UIButton
's background color is blue: read label".
所以我的问题是:如何在阅读标签之前添加附加条件,或者在新元素成为焦点时收到通知?
您无法明确判断用户何时移动了 VoiceOver 光标(就像您无法判断有视力的用户正在看哪里一样)。
对于您想要的行为,您有两个选择:
- 每当其他条件发生变化时,将按钮的
accessibilityLabel
设置为适当的值。
子类 UIButton
并覆盖其 accessibilityLabel
getter 方法:
- (NSString *) accessibilityLabel {
if (SOME_CONDITION) {
return @"Hooray!";
} else {
return @"Womp womp";
}
}
如果您需要完全禁用某个项目,而不是返回 nil
或空字符串,您应该将其 accessibilityElementsHidden
属性 设置为 YES
。
您可以使用 UIAccessibilityFocus
协议来检测辅助功能客户端(包括 VoiceOver)的焦点变化。请注意,UIAccessibilityFocus
是一种非正式协议,每个可访问性元素都必须独立实施。
也就是说,对于您的用例,Aaron 建议在每种情况下返回不同的 accessibilityLabel
是正确的。
我想在 VoiceOver 处于活动状态时每次聚焦不同的元素时调用一个方法。我本来希望有一些 UIAccessibilityNotification
的,但我似乎找不到。
最终,我的目标是在阅读无障碍标签之前添加一个附加条件。例如,与说(默认)"If UIButton
becomes focused: read label" 相反,我希望能够说 "When UIButton
becomes focused AND UIButton
's background color is blue: read label".
所以我的问题是:如何在阅读标签之前添加附加条件,或者在新元素成为焦点时收到通知?
您无法明确判断用户何时移动了 VoiceOver 光标(就像您无法判断有视力的用户正在看哪里一样)。
对于您想要的行为,您有两个选择:
- 每当其他条件发生变化时,将按钮的
accessibilityLabel
设置为适当的值。 子类
UIButton
并覆盖其accessibilityLabel
getter 方法:- (NSString *) accessibilityLabel { if (SOME_CONDITION) { return @"Hooray!"; } else { return @"Womp womp"; } }
如果您需要完全禁用某个项目,而不是返回 nil
或空字符串,您应该将其 accessibilityElementsHidden
属性 设置为 YES
。
您可以使用 UIAccessibilityFocus
协议来检测辅助功能客户端(包括 VoiceOver)的焦点变化。请注意,UIAccessibilityFocus
是一种非正式协议,每个可访问性元素都必须独立实施。
也就是说,对于您的用例,Aaron 建议在每种情况下返回不同的 accessibilityLabel
是正确的。