Пользовательский UIView не отображает доступность на Voice Over

Я пытаюсь озвучить работу с представлением openGL, особенно из фреймворка cocos2d.

Из руководства по доступности Apple я следовал этому разделу: сделать содержимое пользовательских представлений контейнера доступным

Я подклассифицировал представление (CCGLView для cocos2d people), которое является UIView, для реализации неформального протокола UIAccessibilityContainer.

Реализация UIAccessibilityContainer в моем подклассе UIView:

-(NSArray *)accessibilityElements{
return [self.delegate accessibleElements];
}

-(BOOL)isAccessibilityElement{
return NO;
}
-(NSInteger)accessibilityElementCount{
return [self accessibilityElements].count;
}
-(NSInteger)indexOfAccessibilityElement:(id)element{
return [[self accessibilityElements] indexOfObject:element];
}
-(id)accessibilityElementAtIndex:(NSInteger)index{
return [[self accessibilityElements] objectAtIndex:index];
}

Этот код вызывается и -(NSArray *)acessibilityElements возвращает массив UIAccessibilityElements. Однако элементы управления голосом не отображаются, когда я касаюсь экрана. Любые идеи о том, что я скучаю или делаю неправильно?

Дополнительная информация:

Я использую раскадровку и добавляю CCGLView к UIView в раскадровке. _Director.view - это CCGLView, который я разделил на подклассы.

 // Add the director as a child view controller.
[self addChildViewController:_director];

// Add the director's OpenGL view, and send it to the back of the view hierarchy so we can place UIKit elements on top of it.
[self.view addSubview:_director.view];
[self.view sendSubviewToBack:_director.view];

Некоторое время я подозревал, что из-за того, что я добавил подпредставление, это заставляло его не появляться, но я также попытался создать подкласс UIView в раскадровке таким же образом, но он также не работал.

Также это то, как я создаю каждый элемент UIAccessibilityElement в массиве.

UIAccessibilityElement *elm = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:view];
    elm.accessibilityFrame = f;
    elm.accessibilityLabel = t.letter;
    elm.isAccessibilityElement = YES;
    elm.accessibilityHint = @"Button";
    elm.accessibilityValue = t.letter;
    elm.accessibilityTraits = UIAccessibilityTraitButton;

1 ответ

Решение

Нашел решение, которое работает сейчас, на случай, если у кого-то возникнет эта проблема. -(id)accessibilityElementAtIndex:(NSInteger)index возвращал надлежащийUIAccessibilityElement но похоже, что он не был сохранен каким бы то ни было API доступа. Я сделал сильное свойство NSArray для хранения UIAccessibilityElements, и теперь оно работает нормально.

Другие вопросы по тегам