我有一个按钮,按下时会显示一个“帮助”窗口。
通过orderFrontRegardless
显示此窗口,但没有给出键盘焦点。
该窗口包含一个NSTextView
,其中包含帮助文本。
对于有视力障碍的用户,我希望OS X的画外音能够在出现时立即读取该窗口文本视图的内容。
我试图让VoiceOver通过以下方式阅读文本:
NSAccessibilityPostNotification(textView, NSAccessibilityValueChangedNotification);
在我的NSTextView
子类中,我覆盖了辅助功能方法:
- (id)accessibilityAttributeValue:(NSString *)attribute
{
//The notification calls this method for attributes:
//AXRole: returns AXTextArea
//AXSharedCharacterRange: returns range of the text view
return [super accessibilityAttributeValue:attribute];
}
通知会导致其查询AXRole
(NSAccessibilityRoleAttribute
)和AXSharedCharacterRange
(NSAccessibilitySharedCharacterRangeAttribute
)。
字符范围正确返回文本区域的范围。
但是,AXValue
(NSAccessibilityValueAttribute
)请求不得。这就是我希望VoiceOver读取文本字段时需要的。
为什么NSAccessibilityValueChangedNotification
没有请求TextView的NSAccessibilityValueAttribute
?如何让VoiceOver读取文本区域的文本?
答案 0 :(得分:1)
我相信如果不将焦点设置为所需的NSTextView
,就无法做到。
我找到了一个使用iOS的解决方案,可以在这个OSX应用程序中实现:VoiceOver: force an accessibility element to be selected after a screen transition
在iOS中,您可以在发布时传入辅助功能元素
UIAccessibilityLayoutChangedNotification
或UIAccessibilityScreenChangedNotification
作为第二个参数UIAccessibilityPostNotification
和VoiceOver将专注于此 元件。
也许您可以使用NSAccessibility
框架与NSAccessibilityPostNotification
答案 1 :(得分:0)
覆盖
-(NSArray *)accessibilityAttributeNames
{
NSMutableArray *attributeNames = [[super accessibilityAttributeNames] mutableCopy];
[attributeNames addObject:NSAccessibilityValueAttribute];
return attributeNames;
}
您是否尝试过NSLog来查找NSAccessibilityValueAttribute是否属于某个属性?