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", @"")];
}