Realización de una UIView de iOS programática totalmente accesible

Estoy desarrollando un UINavigationContoller para iOS y estoy teniendo problemas para que sea completamente accesible. En loadView creo la UIView principal y la configuro como NO accesible:

  - (void)loadView { CGRect viewRect = [[UIScreen mainScreen] applicationFrame]; UIView *tmp = [[UIView alloc] initWithFrame:viewRect]; [tmp setIsAccessibilityElement:NO]; 

A continuación, agrego UIViews adicionales que contienen imágenes de background y también las que no son accesibles. Todas las vistas y controles se agregan a la UIView "tmp" creada anteriormente. Aquí hay un ejemplo de vista de "background":

 UIImage* microphone = [UIImage imageNamed:@"microphone.jpg"]; UIView* microphoneView = [[[UIView alloc] initWithFrame: CGRectMake(0,0,viewRect.size.width, microphone.size.height)] autorelease]; [microphoneView setBackgroundColor:[UIColor colorWithPatternImage:microphone]]; [microphoneView setIsAccessibilityElement:NO]; [tmp addSubview:microphoneView]; 

Finalmente agrego un UIButton , UILabel y UIButtonBarItem . Agrego estos últimos para que estén en la parte superior de la jerarquía de vistas. Agrego tags y rasgos de accesibilidad a ellos. Aquí está el UIButton :

 self.recordImage = [UIImage imageNamed: @"record_button.png"]; self.stopRecordImage = [UIImage imageNamed: @"stop_button.png"]; self.recordButton.accessibilityTraits |= UIAccessibilityTraitStartsMediaSession; self.recordButton = [[UIButton alloc ] initWithFrame: CGRectMake((viewRect.size.width - recordImage.size.width)/2 , (microphone.size.height + (grayBkg.size.height - recordImage.size.height)/2), recordImage.size.width, recordImage.size.height)]; [self.recordButton setIsAccessibilityElement:YES]; [self.recordButton setAccessibilityLabel: @"toggle recording start"]; [self.recordButton setImage: recordImage forState:UIControlStateNormal]; [self.recordButton addTarget: self action:@selector(processButton:) forControlEvents:UIControlEventTouchUpInside]; [tmp addSubview:recordButton]; 

finalmente

 .... [self setView:tmp]; [tmp release]; 

Llamé a UIAccessibilityPostNotification ( UIAccessibilityScreenChangedNotification , nil); cuando presiono esta vista en la stack.

Con la voz en off, cuando se muestra la vista puedo deslizar y dar a cada uno de mis elementos (el UIButtonBarItem , UILabel y UIButton ) enfocar y puedo activarlos con un toque doble. Sin embargo, VoiceOver no habla información sobre los elementos. La testing en el simulador con el Inspector de Accesibilidad muestra las tags que he establecido a través de aControl.accessibilityLabel = @ "la label";

Esta vista se usa para grabar audio. Si activo los botones y grabo el audio y detengo la grabación, ¿VoiceOver ahora hablará las tags de los elementos cuando los enfoco? ¿Por qué VoiceOver no habla la información cuando la vista se carga por primera vez? ¡Cualquier pista apreciada!

Estoy probando en un iPad 2 con iOS 4.3.3.

Si desea que su vista no sea accesible, utilice:

 [microphoneView setUserInteractionEnabled:NO]; 

Esta vista se utiliza para la grabación de audio. El problema era que estaba configurando la categoría AVSession en AVAudioSessionCategoryRecord en el método viewDidLoad. Esto estaba causando que VoiceOver no hablara la información de la vista. Modifiqué el código para establecer la categoría en AVAudioSessionCategoryRecord solo cuando se presiona el button de grabación. Y lo configuré en AVAudioSessionCategoryPlayAndRecord cuando finalice la grabación. Aquí está el hilo que lo explica completamente: http://lists.apple.com/archives/accessibility-dev/2011/Jul/msg00002.html