我在我的应用中显示UITabBar
,并尝试将accessibilityIdentifier
分配给按钮。为此,我在每个视图控制器实例中使用以下行:
viewController.tabBarItem.accessibilityIdentifier = @"ViewControllerID";
这些viewControllers都像这样添加到UITabBar
:
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];
所以,我认为应该在这里发生的是,我们正在抓取tabBarItem
设置正确的accessibilityIdentifier
(当我设置断点时,每个视图控制器的accessibilityIdentifier
是我的期望。)然后,当它实际显示时,没有accessibilityIdentifier
。
我注意到的事情:
iOS正在使用UITabBarButton
而不是UITabBarItem
。我认为这与它有关。当我打印出标签栏的items
数组时,每个项都有正确的accessibilityIdentifier
,但是UITabBarButton
个对象中没有一个具有关联的accessibilityIdentifier
标签栏项目。
有没有人知道为什么可访问性标识符没有更好的词,“贯穿”到iOS使用的UITabBarButton
对象?
答案 0 :(得分:1)
我遇到了同样的问题,尝试为UITabing添加UITabbar项目的可访问性标识符,我能够使用这种解决方法来完成它,这不是很完美,但它可以工作:
[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++;
}
}
关键是在添加选项卡后将标识符分配给UITabbar子视图,这意味着已创建UITabBarButton对象并准备设置标识符。