2013-05-30 2 views
0

У меня есть NSWebView и когда я использую VoiceOver на Mac OS X он объявляет выбор NSWebView как «HTML содержания» Это, скорее всего, будет смущать конечный пользователь, как я использую его для таможенного контроля и I полностью отрегулировали все другие аспекты доступности NSWebView.NSWebView переопределение VoiceOver при выборе

Как я могу отменить то, что VoiceOver объявляет для NSWebView? Я попытался следующие, однако это не имеет никакого значения:

[webView accessibilitySetOverrideValue:@"Map View" forAttribute:NSAccessibilityDescriptionAttribute]; 

Я также попытался NSAccessibilityRoleDescriptionAttributeNSAccessibilityTitleAttribute и для атрибутов.

ответ

0

Вам может понадобиться подкласс NSWebView и переопределить NSAccessibilityRoleDescriptionAttribute в - (id)accessibilityAttributeValue:(NSString *)attribute метода:

- (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; 
} 
+0

Я пробовал это, и если я сломаю точку в выражении if, атрибут всегда будет установлен в AXParent или AXChildren. Есть идеи? – Luke

+0

См. Мое редактирование. Возможно, вам нужно сообщить протоколу, что вы предоставляете 'NSAccessibilityRoleDescriptionAttribute'. –

+0

Я просто пытался это сделать и когда я оставил точку [атрибуты addObject: attribute]; на разрывы дважды для AXDescription и AXTitleUIElement, но не для других. Также при использовании инспектора доступности AXRoleDescription по-прежнему отображается «HTML-контент». Кажется, что AXRoleDescription уже входит в [супердоступностьAttributeNames]. Любые другие идеи? – Luke