Пользовательский 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, и теперь оно работает нормально.