2012-01-13 15 views
5

Ho un UIView che contiene alcuni controlli (ad esempio pulsanti, etichette, ecc.). Sovrappongo questa vista a un'altra vista (usando addSubview). Se l'utente ha attivato VoiceOver, può scorrere verso sinistra e verso destra per selezionare i controlli. Tuttavia se nascondo la vista in modo che i controlli non siano più visibili, l'utente è ancora in grado di scorrere e selezionarli (anche se in realtà non funzionano). Dato che questo è molto confuso per un utente cieco, vorrei evitare che ciò accada. Ho persino provato a rimuovere la vista che contiene i controlli (usando removeFromSuperview) ma l'utente può ANCORA scorrere per selezionarli (sebbene le piccole caselle che li evidenzia non siano più nelle posizioni corrette). È come se VoiceOver avesse memorizzato che quei controlli erano una volta lì e lo ricorderanno per sempre.I controlli VoiceOver sono selezionabili quando nascosti

Ho anche trovato la proprietà 'accessibilityElementsHidden' e ho provato a impostarla su YES nella vista che contiene i controlli quando è nascosta, ma sembra che non funzioni neanche.

Si tratta di un bug in VoiceOver o mi manca qualcosa? C'è una soluzione?

Grazie.

+0

Ho esattamente il problema opposto! Se la mia vista di sovrapposizione (contenente i pulsanti) è trasparente (alpha = 0.0), nessuna delle sue sottoview (pulsanti, ecc.) Viene trovata da VoiceOver. Nel mio caso, mi piacerebbe avere quei controlli accessibili (tramite VoiceOver) anche quando l'overlay è nascosto - ma non posso !!! –

risposta

10

La parte "memorizzata" mi fa pensare che non stai facendo qualcosa come UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil) dopo aver rimosso le sottoview.

+2

Sì, questo è esattamente ciò che mi mancava. Grazie mille! Tra l'altro ho fatto questa stessa domanda sul forum di sviluppo Apple e non ho ricevuto risposte. Mi sembra sempre di trovare più persone ben informate sullo stackoverflow. –

+0

Cerco di rispondere anche a queste cose, solo una questione di fortuna. A proposito, se puoi richiedere iOS 5, puoi avere visualizzazioni modali di VoiceOver, che possono semplificare la vita di un * LOT *. –

+0

Grazie per il suggerimento. L'ho visto, ma voglio essere in grado di supportare l'iPod Gen 2/3 che sembra avere 4.2 come la versione massima che è possibile installare (suppongo che potrei sempre controllare la versione del sistema operativo e fare o non fare iOS 5 chiamate di conseguenza). –

7

La documentazione per "accessibilityElementsHidden" afferma:

Un valore booleano che indica se gli elementi di accessibilità contenuti in questo elemento accessibilità sono nascosti. ..... Il valore predefinito di per questa proprietà è NO. È possibile utilizzare questa proprietà per nascondere le viste coperte dall'arrivo di una nuova vista. In questo caso , le viste nascoste potrebbero rimanere visibili sullo schermo, ma non sono lo il punto focale delle azioni dell'utente.

È inoltre possibile utilizzare questa proprietà per nascondere una vista transitoria che gli utenti VoiceOver non devono notificare. Ad esempio, VoiceOver non ha il necessario per descrivere la vista traslucida che appare quando gli utenti modificano il volume sui loro dispositivi, perché il feedback acustico di questa azione è sufficiente.

Pertanto, in base a ciò, per rendere tali sottoview ignorate da VoiceOver, in realtà si desidera impostarlo su "SÌ" nella vista principale.

+0

Grazie per la risposta. Avevo fatto l'errore di digitazione prima e lo stavo impostando su SÌ. Il problema sembra essere che non stavo chiamando UIAccessibilityPostNotification dopo aver rimosso le finestre. –

Problemi correlati