2016-11-03 6 views
1

Ich zeige eine UITabBar in meiner App an und versuche, den Tasten accessibilityIdentifier s zuzuweisen. Um dies zu erreichen, verwende ich die folgenden Zeilen in jedem meiner Ansicht-Controller instantiations:Hinzufügen von accessibilityIdentifier zu UITabBarButton

viewController.tabBarItem.accessibilityIdentifier = @"ViewControllerID"; 

Diese Viewcontrollers alle zum UITabBar hinzukommen wie folgt:

NSMutableArray *tabBarItems = [NSMutableArray array]; 

for (NSInteger i=0; i<_viewControllers.count; i++) { 
    UIViewController *viewController = [_viewControllers objectAtIndex:i]; 
    [viewController setCommonTabBarController:self]; 
    [self addChildViewController:viewController]; 

    if (i == 0) { 
     viewController.view.frame = self.currentTabView.bounds; 
     [self.currentTabView addSubview:viewController.view]; 
     [self addConstraintsToSubView:viewController.view]; 
     _selectedViewController = viewController; 
     _selectedIndex = 0; 
    } 

    [viewController didMoveToParentViewController:self]; 
    [tabBarItems addObject:[viewController tabBarItem]]; 
} 

[self.tabBar setItems:tabBarItems animated:animated]; 

Also, was ich denke, sollte geschehen Hier sind wir greifen die tabBarItem, die die accessibilityIdentifier korrekt eingestellt hat (wenn ich Haltepunkte setzen, die accessibilityIdentifier von jedem View-Controller ist, was ich erwarte.) Dann, wenn es tatsächlich angezeigt wird, gibt es keine accessibilityIdentifier.

Dinge, die ich habe bemerkt:

iOS ist UITabBarButton statt UITabBarItem verwenden. Ich denke, das hat etwas damit zu tun. Wenn ich das items Array der Registerkartenleiste druckt, hat jedes der Elemente die richtige accessibilityIdentifier, jedoch hat keines der UITabBarButton Objekte die accessibilityIdentifier des zugeordneten Tab-Leiste-Elements.

Weiß jemand, warum die Accessibility Identifier nicht, aus Mangel an einem besseren Wort, "durch" auf das Objekt UITabBarButton, dass iOS verwendet?

+0

Ich sehe das gleiche Verhalten, ich denke, das ist es wert, ein Radar nach Apple zu archivieren. –

+0

Haben Sie jemals eine Lösung oder einen Workaround dafür gefunden? Ich implementiere UITests, und versuche, das richtige TabBarItem zu erhalten, ohne auf den Titel in der Schaltfläche (Lokalisierung) zu verlassen. – Sti

Antwort

1

Ich lief in das gleiche Problem versucht Zugänglichkeit Identifikatoren UITabBar Artikel für UITesting hinzufügen, ich war in der Lage, es zu tun diese Abhilfe verwenden, die nicht völlig gesund ist, aber es funktioniert:

[self.tabBar setItems:tabBarItems animated:animated]; 

NSArray *identifiers = @[@"itemIdentifier1", @"itemIdentifier2", @"itemIdentifier3"]; 
int index = 0; 

for (UIControl *control in controller.tabBar.subviews) 
{ 
    if ([control isKindOfClass:UIControl.class] && index < identifiers.count) 
    { 
     //This is actually the UITabBarButton 
     control.accessibilityIdentifier = identifiers[index]; 
     index++; 
    } 
} 

Der Schlüssel ist, Weisen Sie die IDs den UITabbar-Teilansichten zu, nachdem die Registerkarten hinzugefügt wurden. Dies bedeutet, dass die UITabBarButton-Objekte erstellt wurden und bereit sind, eine ID festzulegen.

+0

Danke, es funktioniert für mich :) –