2011-12-26 20 views
11

Tengo un UITableView que me desplazo hacia abajo tan pronto como el usuario agrega otro elemento/celda de tabla. Para la pantalla esto funciona bien, porque el usuario puede ver la celda que acaba de agregar en la parte inferior de la tabla. Pero cuando ejecuto mi aplicación usando VoiceOver, la primera UITableCell que se enfoca y lee es la celda superior que está visible en la pantalla.Establecer el foco del voiceover en una celda de tabla específica en uitableview (UIAccessibility)

Quiero configurarlo de modo que la celda que se enfoca y luego lee tan pronto como aparezca esta UITableView sea la última celda de la tabla. ¿Cómo hago esto? Parece que sería muy simple, pero no puedo entenderlo.

Esto es lo que he intentado hasta el momento (en cellForRowAtIndexPath):

if (cellJustAdded && indexPath.row == [array count]-1) { 
    cell.accessibilityElementIsFocused = YES; //obviously this does not work 
} 

pero yo no creo que se puede utilizar accessibilityElementIsFocused así.

+0

Bueno por lo que estoy bastante seguro de que la respuesta a esto se encuentra en algún lugar con 'UIAccessibilityZoomFocusChanged' pero me parece que no puede conseguirlo trabajar. – Ginny

+0

'UIAccessibilityZoomFocusChanged' se usa cuando la función de zoom está activada en la configuración. –

Respuesta

8

Cuando desee que VoiceOver seleccione un elemento determinado, puede publicar una notificación de accesibilidad usando UIAccessibilityPostNotification(...);.

Dependiendo de si se trata de un (pantalla completa) cambio mayor o menor de edad (diseño solamente) cambie usted debe enviar ya sea

  • UIAccessibilityScreenChangedNotification (cambio completo)
  • UIAccessibilityLayoutChangedNotification (pequeño cambio)

En ambos casos, el argumento opcional es el elemento al que debe moverse VoiceOver.

Así que después de haber añadido el nuevo celular a su vista de tabla que llamarían

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, 
           yourNewCellThatShouldHaveFocus); 
+0

De esta manera no parece funcionar para mí en varios lugares. ¿Adivina cuál podría ser el motivo? – Dynamite

Cuestiones relacionadas