2013-08-13 12 views
5

Mam przycisk, który po naciśnięciu pokazuje okno "pomocnika".Wymuszenie głosu w systemie NSAccessibility w celu odczytania nieostrego tekstu OS X?

To okno jest wyświetlane, ale nie podświetlone na klawiaturze, przez orderFrontRegardless.

Okno zawiera NSTextView z tekstem pomocnika w środku.

Dla użytkowników z dysfunkcją wzroku chciałbym, aby podkład głosowy OS X natychmiast przeczytał zawartość widoku tekstowego tego okna, gdy się pojawi.

ja próbuje zrobić VoiceOver czytać tekst poprzez:

NSAccessibilityPostNotification(textView, NSAccessibilityValueChangedNotification); 

W moim podklasy NSTextView I wtedy zastąpić metodę Dostępność:

- (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]; 
} 

Powiadomienie powoduje, że zapytania o AXRole (NSAccessibilityRoleAttribute) i AXSharedCharacterRange (NSAccessibilitySharedCharacterRangeAttribute).

Zakres znaków poprawnie zwraca zakres obszaru tekstu.

Jednak w żadnym momencie nie jest wymagane AXValue (NSAccessibilityValueAttribute). Oczekuję, że będzie to wymagane, gdy VoiceOver będzie czytał pole tekstowe.

Dlaczego NSAccessibilityValueChangedNotification nie wymaga przesłania do obiektu tekstowego NSAccessibilityValueAttribute? Jak sprawić, aby VoiceOver odczytał tekst obszaru tekstowego?

Odpowiedz

1

Uważam, że nie da się tego zrobić bez ustawienia ostrości na pożądaną NSTextView.

znalazłem rozwiązanie używając iOS że być może mogą być realizowane w tej aplikacji OSX: VoiceOver: force an accessibility element to be selected after a screen transition

w iOS można przekazać w elemencie dostępności podczas księgowania UIAccessibilityLayoutChangedNotification lub UIAccessibilityScreenChangedNotification jako drugi argument UIAccessibilityPostNotification i VoiceOver skoncentruje się na tym elemencie .

Może można użyć podobnego podejścia ze NSAccessibility ram z NSAccessibilityPostNotification

0

Override

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

Czy próbowałeś NSLog się tam, aby dowiedzieć się, czy NSAccessibilityValueAttribute jest atrybutem w ogóle?

Powiązane problemy