5

我有一个按钮,按下时会显示一个“帮助”窗口。

通过 显示此窗口,但未指定键盘焦点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 朗读文本区域的文本?

4

2 回答 2

1

我相信如果不将焦点设置为所需的NSTextView.

我找到了一个使用 iOS 的解决方案,可能可以在这个 OSX 应用程序中实现:VoiceOver: force an accessibility element to be selected after a screen transition

UIAccessibilityLayoutChangedNotification在 iOS 中,您可以在发布一个或 UIAccessibilityScreenChangedNotification作为第二个参数 时传入一个辅助功能元素 ,UIAccessibilityPostNotification并且 VoiceOver 将专注于该元素。

NSAccessibility也许您可以在框架中使用类似的方法NSAccessibilityPostNotification

于 2013-08-22T16:27:40.393 回答
0

Override

-(NSArray *)accessibilityAttributeNames
{
    NSMutableArray *attributeNames = [[super accessibilityAttributeNames] mutableCopy];
    [attributeNames addObject:NSAccessibilityValueAttribute];
    return attributeNames;
}

Have you tried NSLog into there to find out if NSAccessibilityValueAttribute is an attribute at all?

于 2013-11-05T23:14:58.077 回答