¿Cómo hacer que VoiceOver anuncie tags de sección en iOS?

En la aplicación iPhone Weather, cuando uso VoiceOver, noté que al tocar una sección por primera vez, anunciará la sección.

Por ejemplo, en iOS 9, al tocar cualquier elemento de la franja del medio por primera vez, se anunciarán "Previsiones por hora" antes de continuar describiendo el elemento al que se recurrió. Al tocar cualquier otra cosa en la tira no se anunciarán "pronósticos por hora".

Al tocar cualquier elemento en la tabla inferior, se anunciarán "Previsiones diarias" antes de continuar describiendo el elemento que tocó. Si presiona cualquier otra cosa en esta tabla, no aparecerá un prefijo con "Pronósticos diarios".

¿Hay una API simple para nombrar secciones de tu aplicación? ¿O tienes que hacer esto manualmente rastreando el cursor de voz en off y cambiando dinámicamente tu label? (¿Esto incluso funciona? ¿Se puede cambiar la label de accesibilidad después de que se toca algo pero antes de que se lea?)

Hay dos enfoques que supongo:

  1. Subclasificando UITableViewCell y anulando la label de accesibilidad.

    - (NSString *) accessibilityLabel { NSString* voiceOverString; // append section title on voiceOverString and then the elements value return voiceOverString; } 
  2. Vea este enlace en los documentos de Apple : Puede establecerAtributoLabel de la celda desde cellForRowAtIndexPath. El ejemplo es para la aplicación del clima en sí.

¿Hay una API simple para nombrar secciones de tu aplicación?

Parece que la reference más adecuada es la Guía de progtwigción de accesibilidad de Apple .

Y su API, la Documentación de UIA de Apple .

Establecer la propiedad shouldGroupAccessibilityChildren parece ser la mejor manera de lograr su objective. La API vinculada lo describe como,

Un valor boolean que indica si VoiceOver debe agrupar los elementos que son secundarios del receptor, independientemente de sus posiciones en la pantalla. Establecer el valor de esta propiedad en YES en la vista principal de los elementos en las columnas verticales hace que VoiceOver respete la agrupación de la aplicación y los navegue correctamente.

Cosas a tener en count:

  1. ¿El elemento objective es un elemento de accesibilidad? (puede verificar utilizando la propiedad isAccessibilityElement ; los controles y vistas estándar de UIKit implementan el protocolo de accesibilidad de UIA de forma pnetworkingeterminada)
    • Si es así, solo necesita establecer sus attributes de accesibilidad
    • De lo contrario, debe cambiar su valor, view.isAccessibilityElement = true
  2. La propiedad accessibilityLabel identifica el elemento
  3. La propiedad accessibilityHint describe la acción desencadenada por un elemento
  4. Puede establecer attributes de accesibilidad en el guión gráfico.
  5. O bien, puede establecer attributes de accesibilidad en la implementación de su subclass de vista