accessibilityIdentifier

accessibilityIdentifier

我在我的应用程序中显示UITabBar,并试图将accessibilityIdentifier分配给按钮。为此,我在每个视图控制器实例中使用以下行:

viewController.tabBarItem.accessibilityIdentifier = @"ViewControllerID";

这些viewController都将添加到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];

因此,我认为这里应该发生的事情是,我们正在获取正确设置了tabBarItemaccessibilityIdentifier(当我设置断点时,每个View Controller的accessibilityIdentifier就是我所期望的。)然后,当它实际显示时,没有accessibilityIdentifier

我注意到的事情:

iOS正在使用UITabBarButton而不是UITabBarItem。我认为这与它有关。当我打印出选项卡栏项的items数组时,每个项目都具有正确的accessibilityIdentifier,但是,没有一个UITabBarButton对象都具有关联的选项卡栏项的accessibilityIdentifier

有谁知道为什么可访问性标识符由于缺少一个更好的词而不能“传递”到iOS使用的UITabBarButton对象?

最佳答案

我遇到了尝试将可访问性标识符添加到UITesting的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对象并准备设置标识符。

关于ios - 向UITabBarButton添加accessibilityIdentifier,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40404703/

10-13 05:42