2012-04-12 29 views
5

Estoy revisando nuestra aplicación iOS para solucionar problemas de accesibilidad. Una de las características de la aplicación es un UITextField en el que el usuario puede ingresar consultas de búsqueda. Establecí el rasgo del campo como "campo de búsqueda", y VoiceOver hace un buen trabajo con el campo la mayor parte del tiempo. Cuando hay texto en el campo, lee el texto y luego dice "campo de búsqueda".¿Cómo puedo establecer un rasgo de accesibilidad para el texto del marcador de posición en UITextField?

El problema que quiero resolver es cómo maneja VoiceOver el texto del marcador de posición. Cuando el campo de texto está vacío, hemos establecido el texto de marcador de posición para mostrar una consulta de muestra. Dado que aparece como texto atenuado, los usuarios pueden ver que es solo el texto del marcador de posición. Pero VoiceOver no hace esa distinción para los usuarios con discapacidad visual. Simplemente lee el texto del marcador de posición de la misma manera que el texto normal, sin una descripción adicional.

¿Hay alguna forma de agregar un rasgo de accesibilidad al texto del marcador de posición de UITextField? ¿O las personas han trabajado en esto por otros medios?

Respuesta

0

Creo que puede establecer la etiqueta de accesibilidad y otras propiedades de accesibilidad en un objeto NSString y luego usar esa cadena como el texto de marcador de posición. Voz en off descubrirá esa propiedad y la usará.

NSString *placeholderText = @"Search"; 
placeholderText.accessibilityLabel = @"Try searching for xxxx"; 
field.placeholder = placeholderText; 

Algo así. No probado, pero lo vi en uno de los videos para desarrolladores de WWDC.

ADVERTENCIA: El comportamiento en iOS 8.0 y superiores no es el esperado.

//In iOS 8+ 
NSString *placeholderText = @"Search"; //This will be announced 
placeholderText.accessibilityLabel = @"Try searching for xxxx";//This will be ignored 
field.placeholder = placeholderText; 

Esta respuesta debería considerarse obsoleta.

+0

Esto no es sensible. Los rasgos solo se aplican a los objetos UI. – ChrisCM

+0

Excepto cuando no lo supongo: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/UIKitUICatalog/UISegmentedControl.html#//apple_ref/doc/uid/TP40012857-UISegmentedControl-SW16 –

+0

Eso es hacer referencia a los controles segmentados y las etiquetas de accesibilidad no los rasgos. Consulte este repositorio de código abierto para ver por qué su solución es, de hecho, no sensorial, y también por qué los rasgos no funcionan en objetos NSString, INCLUSO cuando se aplican a controles segmentados. Los controles segmentados SON una excepción para las etiquetas de accesibilidad en NSStrings, aunque no hice ningún comentario al respecto. Sin embargo, en mi demostración verá que esta excepción NO se aplica al texto de marcador de posición, como lo requiere el OP. https://github.com/chriscm2006/iOS-Traits-on-NSStrings – ChrisCM

0

No puede. Los rasgos solo tienen sentido en los Elementos de Accesibilidad. Para su UITextField para ser "texto estático" es probable que no sea correcto. Establecer el rasgo en el elemento dentro del campo de texto no tendrá ningún efecto, aunque pueda ser un código válido.

Lo que puede hacer es editar la etiqueta de accesibilidad del control.

0

derivar una clase personalizada de UITextField de la siguiente manera (es el código de Swift, pero se puede adaptar a Objective-C):

class MyTextField: UITextField { 
    override public var accessibilityValue: String? { 
     get { return self.text } 
     set { super.accessibilityValue = newValue } 
    } 
} 

Utilice esta clase como una clase personalizada en lugar de UITextField. Esto impedirá que VoiceOver lea el texto del marcador de posición cuando el campo esté vacío.

Luego, configure su etiqueta de accesibilidad, p. "Búsqueda" y sugerencia de accesibilidad a lo que sea que desee insinuar (consulte el Guidelines for Creating Hints de Apple). Puede asignar esos valores mediante programación, aunque probablemente sea mejor asignarlos en Interface Builder.

Cuestiones relacionadas