アクセシビリティーIDは、開発者が生成したGUIオブジェクトのIDであり、自動化テストに使用できます。
UIBarButtonItem
はUIAccessibilityIdentification
を実装していません。しかし、アクセシビリティ識別子を割り当てることができる可能性はありますか?
UIBarButtonItem
をサブクラス化し、そのサブクラスにUIAccessibilityIdentification
プロトコルを実装できます。たとえば、BarButtonWithAccesibility
としましょう。
BarButtonWithAccesibility.h
:
@interface BarButtonWithAccesibility : UIBarButtonItem<UIAccessibilityIdentification>
@property(nonatomic, copy) NSString *accessibilityIdentifier NS_AVAILABLE_IOS(5_0);
このプロトコルを遵守するための唯一の(厳密な)要件は、accessibilityIdentifier
プロパティを定義することです。
ビューコントローラーで、たとえばviewDidLoad
で、UIToolbarを設定して、サブクラス化された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];
}
そしてbuttonPressed:
accessibilityIdentifier
へのアクセス権があることを確認できます:
- (void)buttonPressed:(id)sender{
if ([sender isKindOfClass:[BarButtonWithAccesibility class]]) {
BarButtonWithAccesibility *theButton = (BarButtonWithAccesibility *)sender;
NSLog(@"My accesibility identifier is: %@", theButton.accessibilityIdentifier);
}
}
お役に立てれば。
IOS 5以降、次のように実行できます。
UIBarButtonItem *btn = [[UIBarButtonItem alloc] init...;
btn.accessibilityLabel = @"Label";
その中にUIToolbar
を作成した場合、プログラムで複数のUIBarButtonItem
を作成したい場合は、そのようにアクセスしてaccessibilityLabel
を設定し、以下のように設定できます:-
-(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", @"")];
}
サブクラス化UIBarButtonItem
は良い解決策です。ただし、ニーズによっては、accessibilityIdentifier
がカスタムイメージを使用していると仮定して、UIBarButtonItem
をUIBarButtonItem
のカスタムイメージに単に割り当てる方が理にかなっている場合があります。