2013-12-12 15 views

Odpowiedz

13

można podklasy UIBarButtonItem i wdrożyć protokół UIAccessibilityIdentification w tej podklasy, pozwala powiedzmy BarButtonWithAccesibility.

W BarButtonWithAccesibility.h:

@interface BarButtonWithAccesibility : UIBarButtonItem<UIAccessibilityIdentification> 

@property(nonatomic, copy) NSString *accessibilityIdentifier NS_AVAILABLE_IOS(5_0); 

Jedyny (surowe) wymóg, przylegający do tego protokołu definiuje właściwość accessibilityIdentifier.

Teraz w kontrolerze widoku, powiedzmy w viewDidLoad, można założyć UIToolbar i dodać podklasy 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]; 
} 

I w buttonPressed: można zweryfikować, że masz dostęp do accessibilityIdentifier:

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

Mam nadzieję, że to pomoże.

+0

dokładnie to, czego potrzebowałem, dzięki! – Chris

+0

Cieszę się, że mogę pomóc! –

+5

Wygląda na to, że iOS 8 naprawił problem, a 'accessibilityIdentifier' może teraz być również używany z' UIBarButtonItem'. – fabb

4

W iOS 5 można zrobić to tak:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] init...; 
btn.accessibilityLabel = @"Label"; 
+0

Czy identyfikator dostępności jest taki sam jak etykieta? – Chris

+0

Nie jestem pewien, co masz na myśli, ale spróbuję: domyślnie jest zero, musisz ustawić to sam. –

+0

możesz używać tagu zamiast dostępu, a także uzyskać obiekt z tagu. –

3

Jeśli masz UIToolbar utworzony wewnątrz, że jeśli chcesz, aby utworzyć wiele UIBarButtonItem programowo to może być dostępne tak i ustawić accessibilityLabel jak dobrze jak że poniżej: -

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

Podklasyfikacja UIBarButtonItem jest dobrym rozwiązaniem. W zależności od Twoich potrzeb może być bardziej sensowne przypisanie accessibilityIdentifier do niestandardowego obrazu twojego UIBarButtonItem, zakładając, że twój UIBarButtonItem używa niestandardowego obrazu.