L'identifiant d'accessibilité est un ID généré par le développeur pour les objets GUI, qui peut être utilisé pour les tests d'automatisation.
Un UIBarButtonItem
n'implémente pas UIAccessibilityIdentification
. Cependant, est-il possible que je puisse attribuer un identifiant d'accessibilité?
Vous pouvez sous-classe UIBarButtonItem
et implémenter le protocole UIAccessibilityIdentification
dans cette sous-classe, disons BarButtonWithAccesibility
.
Dans BarButtonWithAccesibility.h
:
@interface BarButtonWithAccesibility : UIBarButtonItem<UIAccessibilityIdentification>
@property(nonatomic, copy) NSString *accessibilityIdentifier NS_AVAILABLE_IOS(5_0);
La seule exigence (stricte) pour adhérer à ce protocole est de définir la propriété accessibilityIdentifier
.
Maintenant, dans votre contrôleur de vue, disons dans viewDidLoad
, vous pouvez configurer une UIToolbar et ajouter votre UIBarButtonItem sous-classé:
#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];
}
Et dans le buttonPressed:
vous pouvez vérifier que vous avez accès à accessibilityIdentifier
:
- (void)buttonPressed:(id)sender{
if ([sender isKindOfClass:[BarButtonWithAccesibility class]]) {
BarButtonWithAccesibility *theButton = (BarButtonWithAccesibility *)sender;
NSLog(@"My accesibility identifier is: %@", theButton.accessibilityIdentifier);
}
}
J'espère que cela t'aides.
Depuis iOS 5, vous pouvez le faire comme ceci:
UIBarButtonItem *btn = [[UIBarButtonItem alloc] init...;
btn.accessibilityLabel = @"Label";
Si vous avez créé UIToolbar
à l'intérieur, si vous souhaitez créer plusieurs UIBarButtonItem
par programme, vous pouvez y accéder comme cela et définir accessibilityLabel
ainsi que ci-dessous: -
-(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", @"")];
}
Le sous-classement UIBarButtonItem
est une bonne solution. En fonction de vos besoins, il peut être plus logique d'affecter simplement le accessibilityIdentifier
à l'image personnalisée de votre UIBarButtonItem
, en supposant que votre UIBarButtonItem
utilise une image personnalisée.