2012-10-30 11 views
5

enter image description hereAccessibilità per iOS, VoiceOver leggere problema ordine

E 'possibile modificare l'ordine in cui la funzione VoiceOver per l'accessibilità in iPad legge gli elementi, quando il gesto 'con due dita Flick Down' è fatto?

Per l'immagine allegata, che contiene 3 etichette e un pulsante, il VoiceOver legge gli elementi nel modo seguente,

Etichetta 1 -> Etichetta 2 -> Button -> Label 3

Può il per essere cambiato,

Etichetta 1 -> Etichetta 2 -> Label 3 -> Pulsante

risposta

13

Il modo più veloce per raggiungere questo obiettivo per il vostro esempio è quello di posizionare le tre etichette in modo trasparente UIView sottoclasse di fungere da contenitore per y le nostre etichette Questa sottoclasse dovrà essere configurata correttamente per consentire a VoiceOver di interpretarlo. Se il target di implementazione è iOS6, in questa sottoclasse puoi semplicemente rispondere alla domanda "dovrebbe raggruppare i bambini con accessibilità".

-(BOOL)shouldGroupAccessibilityChildren{ 
    return YES; 
} 

Per sotto iOS6 sarebbe più complicato, se non che il vostro UIView contenitore sottoclasse conterrebbe solo UILabels che sono elementi di accessibilità. Si potrebbe implementare in questo modo:

-(BOOL)isAccessibilityElement{ 
    return NO; 
} 
-(NSInteger)accessibilityElementCount{ 
    return self.subviews.count; 
} 
-(id)accessibilityElementAtIndex:(NSInteger)index{ 
    return [self.subviews objectAtIndex:index]; 
} 
-(NSInteger)indexOfAccessibilityElement:(id)element{ 
    return [self.subviews indexOfObject:element]; 
} 

Ho testato questo codice di esempio e lo fa quello che stai cercando, se avete bisogno di qualsiasi chiarimento si prega di aggiungere un commento. Sempre felice di aiutare a rendere le cose più accessibili.

+0

Grazie per la risposta. Ma, 'shouldGroupAccessibilityChildren' non sembra essere chiamato. – Breakpoint

+1

@Vittal 'shouldGroup..' verrà chiamato solo dai dispositivi iOS6, non tutte le app create con> = 6 SDK.Confermare inoltre che la vista che contiene le etichette sia della classe personalizzata nello xib o nella storyboard utilizzando la finestra di ispezione dell'identità. Fammi sapere se hai ancora problemi. – NJones

+0

ah, la parte della classe personalizzata è quello che mi mancava. errore stupido. Ora funziona. Molte grazie. e sì, stavo testando su iOS6. Ho bisogno di mettere le mani sulla versione inferiore a 6 per testare il resto. Quindi basta aggiungere il codice per sotto iOS 6, nella classe personalizzata andrà bene? – Breakpoint

0

Penso che tu possa farlo nello storyboard. L'ordine VoiceOver è determinato dall'ordine delle viste nel profilo del documento.

Basta trascinare e rilasciare le viste nella gerarchia della vista nell'ordine corretto.

+0

Li ho nel giusto ordine, ma ancora VoiceOver non li legge correttamente. Sto usando iOS 9, però, non so se le cose sono cambiate da allora. – user1366265

+1

No, normalmente vengono letti essenzialmente da sinistra a destra sullo schermo –

4

Ho provato a impostare il shouldGroupAccessibilityChildren su YES ma non ha funzionato per me.

Che cosa ha funzionato per me era impostare direttamente l'etichetta di accessibilità della vista genitore (perché volevo che tutti gli elementi fossero letti in un colpo solo/un gesto di VoiceOver).

[cell setAccessibilityLabel:[NSString stringWithFormat:@"%@, %@", cityLabel, temperatureLabel]]; 

È possibile che questo frammento di codice da documentazione di Apple Enhancing the Accessibility of Table View Cells

0

In Swift, allegando un IBOutlet al UIView genitore, quindi impostando shouldGroupAccessibilityChildren true sarà sufficiente.

abc.shouldGroupAccessibilityChildren = true

Ho fatto notare che se anche l'impostazione isAccessibilityElement = true il raggruppamento non avrà effetto. Analogamente, la verifica della casella di controllo dell'accessibilità nello storyboard o nello xib impedirà anche il raggruppamento.

Problemi correlati