2013-08-13 7 views
5

Ich habe eine Taste, die beim Drücken zeigt ein "Helfer" -Fenster.NSAccessibility Voiceover erzwingen, um unfokussiertes OS X Textfeld zu lesen?

Dieses Fenster wird über orderFrontRegardless angezeigt, aber nicht über den Tastaturfokus.

Das Fenster enthält einen NSTextView mit Hilfstext darin.

Für sehbehinderte Benutzer möchte ich, dass OS X Voiceover sofort den Inhalt der Textansicht dieses Fensters liest, wenn es angezeigt wird.

ich Voiceover bin versucht zu machen, lesen Sie den Text über:

NSAccessibilityPostNotification(textView, NSAccessibilityValueChangedNotification); 

In meiner Unterklasse von NSTextView ich dann die Zugänglichkeit Methode außer Kraft setzen:

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

Die Meldung bewirkt, dass es für AXRole abzufragen (NSAccessibilityRoleAttribute) und AXSharedCharacterRange (NSAccessibilitySharedCharacterRangeAttribute).

Der Zeichenbereich gibt den Bereich des Textbereichs korrekt zurück.

Jedoch wird AXValue (NSAccessibilityValueAttribute) an keinem Punkt angefordert. Das ist, was ich erwarte, wenn VoiceOver das Textfeld lesen soll.

Warum fordert die NSAccessibilityValueChangedNotification nicht die NSAccessibilityValueAttribute von TextView an? Wie lasse ich VoiceOver den Text des Textbereichs lesen?

Antwort

1

Ich glaube, es gibt keine Möglichkeit, ohne den Fokus auf die gewünschte NSTextView zu setzen.

Ich habe eine Lösung mit iOS gefunden, die vielleicht in dieser OSX-Anwendung implementiert werden können: VoiceOver: force an accessibility element to be selected after a screen transition

In iOS Sie in einem Zugänglichkeit Elemente passieren können, wenn ein UIAccessibilityLayoutChangedNotification oder UIAccessibilityScreenChangedNotification als zweites Argument veröffentlichen zu UIAccessibilityPostNotification und VoiceOver wird sich auf das Element konzentrieren.

Vielleicht können Sie einen ähnlichen Ansatz mit NSAccessibility Framework verwenden mit NSAccessibilityPostNotification

0

Aufschalten

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

Haben Sie versucht, NSLog in dort, um herauszufinden, ob NSAccessibilityValueAttribute ein Attribut überhaupt ist?