web-dev-qa-db-fra.com

Définition de l'identificateur d'accessibilité par programmation sur UIBarButtonItem

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é?

23
Chris

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.

16
Don Miguel

Depuis iOS 5, vous pouvez le faire comme ceci:

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

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

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.

2
Ben Boral