ios objective-c automation accessibility

ios - Estableciendo el identificador de accesibilidad programáticamente en UIBarButtonItem



objective-c automation (4)

El identificador de accesibilidad es un ID generado por el desarrollador para objetos GUI, que se puede usar para pruebas de automatización.

Un UIBarButtonItem no implementa UIAccessibilityIdentification . Sin embargo, ¿existe la posibilidad de que pueda asignar un identificador de accesibilidad?


A partir de iOS 5 puedes hacerlo así:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] init...; btn.accessibilityLabel = @"Label";


La subclase UIBarButtonItem es una buena solución. Sin embargo, dependiendo de sus necesidades, puede tener más sentido simplemente asignar el UIBarButtonItem accessibilityIdentifier a la imagen personalizada de su UIBarButtonItem , asumiendo que su UIBarButtonItem usa una imagen personalizada.


Podría subclase UIBarButtonItem e implementar el protocolo UIAccessibilityIdentification en esa subclase, digamos BarButtonWithAccesibility .

En BarButtonWithAccesibility.h :

@interface BarButtonWithAccesibility : UIBarButtonItem<UIAccessibilityIdentification> @property(nonatomic, copy) NSString *accessibilityIdentifier NS_AVAILABLE_IOS(5_0);

El único requisito (estricto) para adherirse a este protocolo es definir la propiedad accessibilityIdentifier .

Ahora en su controlador de vista, digamos que en viewDidLoad , puede configurar una barra de herramientas de UIT y agregar su UIBarButtonItem subclasificado:

#import "BarButtonWithAccesibility.h" - (void)viewDidLoad{ [super viewDidLoad]; UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; BarButtonWithAccesibility *myBarButton = [[BarButtonWithAccesibility alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(buttonPressed:)]; myBarButton.accessibilityIdentifier = @"I am a test button!"; toolbar.items = [[NSArray alloc] initWithObjects:myBarButton, nil]; [self.view addSubview:toolbar]; }

Y dentro del buttonPressed: puede verificar que tiene acceso al buttonPressed: accessibilityIdentifier :

- (void)buttonPressed:(id)sender{ if ([sender isKindOfClass:[BarButtonWithAccesibility class]]) { BarButtonWithAccesibility *theButton = (BarButtonWithAccesibility *)sender; NSLog(@"My accesibility identifier is: %@", theButton.accessibilityIdentifier); } }

Espero que esto ayude.


Si ha creado UIToolbar dentro de eso, si desea crear múltiples UIBarButtonItem programática, puede acceder a él de esa manera y configurar la UIBarButtonItem accessibilityLabel , así como a continuación:

-(void)viewDidAppear:(BOOL)animated { UIBarButtonItem *infoButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"info" style:UIBarButtonItemStyleBordered target:self action:@selector(infoButtonClicked)]; [self.customToolBar setItems:[NSArray arrayWithObject:infoButtonItem]]; //Here if you have muliple you can loop through it UIView *view = (UIView*)[self.customToolBar.items objectAtIndex:0]; [view setAccessibilityLabel:NSLocalizedString(@"Test", @"")]; }