2013-08-13 14 views
5

Ho un pulsante, che quando premuto, mostra una finestra "helper".Forza NSAccessibilità Voiceover per leggere il campo di testo OS X sfocato?

Questa finestra viene visualizzata, ma non fornita con lo stato attivo della tastiera, tramite orderFrontRegardless.

La finestra contiene un NSTextView con testo di supporto interno.

Per gli utenti con problemi di vista, vorrei che la voce fuori campo di OS X legga immediatamente il contenuto della visualizzazione di testo di questa finestra quando viene visualizzata.

Sto tentando di fare VoiceOver leggere il testo tramite:

NSAccessibilityPostNotification(textView, NSAccessibilityValueChangedNotification); 

Nel mio sottoclasse di NSTextView Ho poi override del metodo di accessibilità:

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

La notifica fa sì che una query per AXRole (NSAccessibilityRoleAttribute) e AXSharedCharacterRange (NSAccessibilitySharedCharacterRangeAttribute).

L'intervallo di caratteri restituisce correttamente l'intervallo dell'area di testo.

Tuttavia, non è richiesto AXValue (NSAccessibilityValueAttribute). Quello che mi aspetto è richiesto quando vuoi che VoiceOver legga il campo di testo.

Perché il NSAccessibilityValueChangedNotification non richiede il TextView NSAccessibilityValueAttribute? Come faccio a fare in modo che VoiceOver legga il testo dell'area di testo?

risposta

1

Credo che non sia possibile farlo senza impostare lo stato attivo su NSTextView desiderato.

ho trovato una soluzione che utilizza iOS che forse può essere implementato in questa applicazione OSX: VoiceOver: force an accessibility element to be selected after a screen transition

in iOS è possibile passare in un elemento di accessibilità quando la pubblicazione di un UIAccessibilityLayoutChangedNotification o UIAccessibilityScreenChangedNotification come secondo argomento a UIAccessibilityPostNotification e VoiceOver si concentrerà su quell'elemento .

forse è possibile utilizzare un approccio simile con NSAccessibility quadro con NSAccessibilityPostNotification

0

Override

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

Hai provato NSLog in là per scoprire se NSAccessibilityValueAttribute è un attributo a tutti?