Setting accessibility identifier programmatically on UIBarButtonItem

后端 未结 4 1892
轻奢々
轻奢々 2021-02-12 08:26

The accessibility identifier is a developer generated ID for GUI objects, which can be used for automation tests.

A UIBarButtonItem does not implement

相关标签:
4条回答
  • 2021-02-12 08:31

    As of iOS 5 you can do it like this:

    UIBarButtonItem *btn = [[UIBarButtonItem alloc] init...;
    btn.accessibilityLabel = @"Label";
    
    0 讨论(0)
  • 2021-02-12 08:46

    The subclassing UIBarButtonItem is a good solution. Depending on your needs, though, it may make more sense to simply assign the accessibilityIdentifier to the custom image of your UIBarButtonItem, assuming your UIBarButtonItem uses a custom image.

    0 讨论(0)
  • 2021-02-12 08:50

    If you have UIToolbar created inside that if you want to create multiple UIBarButtonItem programatically then it can be accessed like that and set accessibilityLabel as well like that below:-

        -(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", @"")];
        }
    
    0 讨论(0)
  • 2021-02-12 08:57

    You could subclass UIBarButtonItem and implement the UIAccessibilityIdentification protocol in that subclass, lets's say BarButtonWithAccesibility.

    In BarButtonWithAccesibility.h:

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

    The only (strict) requirement for adhering to this protocol is defining the accessibilityIdentifier property.

    Now in your view controller, let's say in viewDidLoad, you could set up a UIToolbar and add your subclassed UIBarButtonItem:

    #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];
    }
    

    And within the buttonPressed: you could verify that you have access to the accessibilityIdentifier:

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

    Hope this helps.

    0 讨论(0)
提交回复
热议问题