我有一个NSWebView,当我在Mac OS X上使用VoiceOver时,它将NSWebView选项声明为"HTML content“,这很可能会让最终用户感到困惑,因为我将它用于自定义控件,并且我已经正确地处理了NSWebView的所有其他可访问性方面。
如何覆盖VoiceOver为NSWebView发布的内容?我已经尝试了以下方法,但是没有任何区别:
[webView accessibilitySetOverrideValue:@"Map View" forAttribute:NSAccessibilityDescriptionAttribute];我还尝试了NSAccessibilityRoleDescriptionAttribute和NSAccessibilityTitleAttribute的属性。
发布于 2013-05-31 06:18:31
您可能需要在- (id)accessibilityAttributeValue:(NSString *)attribute方法中创建NSWebView的子类并覆盖NSAccessibilityRoleDescriptionAttribute:
- (id)accessibilityAttributeValue:(NSString *)attribute
{
id value = nil;
if ( [attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute] )
{
value = @"Map View";
}
// all your other ifs here
else
{
value = [super accessibilityAttributeValue:attribute];
}
return value;
}确保告诉NSAccessibility您所提供的内容(特别是NSAccessibilityRoleDescriptionAttribute部分):
- (NSArray *)accessibilityAttributeNames
{
static NSMutableArray *attributes = nil;
if ( attributes == nil )
{
attributes = [[super accessibilityAttributeNames] mutableCopy];
NSArray *additionalAttributes = @[NSAccessibilityDescriptionAttribute, NSAccessibilityRoleAttribute, NSAccessibilityChildrenAttribute, NSAccessibilityTitleUIElementAttribute, NSAccessibilityRoleDescriptionAttribute];
for ( NSString *attribute in additionalAttributes )
{
if ( ![attributes containsObject:attribute] )
{
[attributes addObject:attribute];
}
}
}
return attributes;
}https://stackoverflow.com/questions/16828435
复制相似问题