2013-03-14 15 views
6

La mia app ha uno UISegmentedControl che contiene due pulsanti. Sono in grado di accedere ai campi di accessibilità di ciascun pulsante; il problema che sto riscontrando è che per le visualizzazioni secondarie di un controllo segmentato, VoiceOver legge le proprietà di accessibilità della sotto-visualizzazione e quindi annuncia la posizione della vista all'interno del controllo segmentato, quindi l'annuncio VoiceOver per il primo pulsante è "Messaggio precedente. Due." e per il secondo pulsante è "Next message. Button. Two of two".Come interrompere l'annuncio di VoiceOver per UISegmentedControl?

Come posso impedire l'ultima parte di questi annunci (le parti "una delle due" e "due delle due"), che non hanno alcun significato per gli utenti di VoiceOver?

+0

Quei annunci di posizione sono parte dello standard per 'UISegmentedController'. Hanno un significato reale. Ciò consente alla persona di sapere che i pulsanti sono correlati e non separati. Senza "One of Two", apparirebbero come pulsanti individuali per i non vedenti, invece dei "pulsanti radio" che sono realmente. – rmaddy

+0

@rmaddy: non è che non abbiano alcun significato. Questo controller segmentato si trova su una barra degli strumenti che contiene altri pulsanti che non fanno parte del controller segmentato. Non c'è niente di speciale in questi due pulsanti (logicamente, non sono pulsanti radio), ma sono stati implementati come controllo segmentato molto prima che ci preoccupassimo dell'accessibilità. Voglio che questi pulsanti vengano annunciati allo stesso modo di tutti gli altri, per evitare confusione. – MusiGenesis

+0

I due pulsanti sono speciali. I due pulsanti di un controllo segmentato si escludono a vicenda. Solo uno può essere selezionato alla volta. Questo è lo scopo della parte "One of Two", "Two of Two". Un pulsante standalone non ha bisogno di questo. Rimozione di quella parte dell'annuncio causerà più confusione a voce sugli utenti. Devono essere consapevoli che i pulsanti si escludono a vicenda. – rmaddy

risposta

4

È possibile impostare accessibilityTraits proprietà di subviews s' UISegmentedControl per UIAccessibilityTraitNone per disabilitare parte "Scheda X di Y" della VoiceOver:

for (UIView *thisView in self.segmentedControl.subviews) { 
     [thisView setAccessibilityTraits:UIAccessibilityTraitNone]; 
    } 
+0

Questo era il trucco, grazie. Un po 'di sofferenza, tuttavia, dal momento che impostare i pulsanti su UIAccessibilityTraitNone significa che non vengono annunciati come pulsanti e anche il loro stato abilitato/disabilitato viene ignorato, quindi ho appena aggiunto tali proprietà a AccessibilityLabel a livello di codice (ad esempio "Dimmer. Pulsante. " – MusiGenesis

+0

Non ho indagato in dettaglio, ma credo che qualche altra combinazione di UIAccessibilityTraits potrebbe darti il ​​comportamento desiderato senza disabilitare la parte utile. – proxi

+0

Bene, la cosa più basilare di cui ho bisogno è che si annunci come" Pulsante ", visto che tutti gli altri pulsanti fanno. Ma se ho appena impostato le due sottoview su UIAccessibilityTraitButton, il controllo segmentato fa la cosa" 1 di 2 ".Un grosso problema: goditi la tua taglia. – MusiGenesis

Problemi correlati