2016-11-03 11 views
1

Я показываю UITabBar в своем приложении и пытаюсь назначить кнопкам accessibilityIdentifier s. Для этого я использую следующие строки в каждом из моих представлений контроллеров конкретизации:Добавление accessibilityIdentifier в UITabBarButton

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 соответствующего элемента панели вкладок.

Кто-нибудь знает, почему идентификатор доступности отсутствует, из-за отсутствия лучшего слова, «переносящего» на объект UITabBarButton, который использует iOS?

+0

Я вижу такое же поведение, я думаю, это стоит подать радар в яблоко. –

+0

Вы когда-нибудь находили решение или обходное решение для этого? Я реализую UITests и пытаюсь получить правильный tabBarItem, не полагаясь на заголовок в кнопке (локализация). – Sti

ответ

1

Я столкнулся с той же проблемой, пытаясь добавить идентификаторы доступности для UITabbar элементов для UITesting, я был в состоянии сделать это с помощью этого метода обхода, который не является совершенно нормален, но он работает:

[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 были созданы и готовы к установке идентификатора.

+0

Спасибо, это работает для меня :) –