paw*_*221 9 accessibility uiview ios voiceover uiaccessibility
我有一个简单的 UIView 层次结构。有一个包含视图 B 和 C 的父视图 A。如果我将所有视图设置为可访问性元素,则只有视图 A 可访问。视图 B 和 C 不可点击。我需要所有视图(A、B 和 C)都是可访问性元素。
我知道您可以通过将所有视图(A、B 和 C)置于同一级别来实现这一点,但我的应用程序中的视图层次结构不允许任何更改。
你有什么解决办法吗?
1)将所有视图即A、B、C作为accessibilityElement。
A.isAccessibilityElement = true
B.isAccessibilityElement = true
C.isAccessibilityElement = true
Run Code Online (Sandbox Code Playgroud)
2)如果你的父视图是parentView,那么将所有这些视图设置为其AccessibilityElements
parentView.accessibilityElements = [A, B, C]
Run Code Online (Sandbox Code Playgroud)
PS:-accessibilityElements 创建一组数组中提到的所有元素。这也用于更改元素的顺序。但您必须记住的唯一一件事是将 ParentView 中的所有元素提及到此数组,否则在视图上滑动时该元素将被跳过。
视图A是可访问性元素吗?要使子视图可访问,包含的视图不能是可访问元素。
view.isAccessibilityElement = false
Run Code Online (Sandbox Code Playgroud)
如果您需要第三个视图 ,A可访问,则将其设为B和的同级视图C。
最后,我使用 UIAccessibilityContainer 协议和我现有的视图层次结构解决了它:A(父)、B(子)和 C(子)。我使用了另一个视图,比如 X 是 A 的父视图,并在其中实现了 UIAccessibilityContainer 协议。这是创建在视图 X 中创建的 UIAccessibilityElements 数组的示例代码。
- (NSArray *)voiceOverElements {
if (!_voiceOverElements) {
UIAccessibilityElement *element = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self];
CGRect frame = UIAccessibilityConvertFrameToScreenCoordinates(A.frame, self);
element.accessibilityFrame = frame;
_voiceOverElements = @[element];
for (UIView *view in A.subviews) {
UIAccessibilityElement * element = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self];
CGRect frame = UIAccessibilityConvertFrameToScreenCoordinates(view.frame, A);
element.accessibilityFrame = frame;
_voiceOverElements = [_voiceOverElements arrayByAddingObject:element];
}
}
return _voiceOverElements;
}
Run Code Online (Sandbox Code Playgroud)
在同一个视图(X)中,UIAccessibilityContainer 协议实现如下:
- (BOOL)isAccessibilityElement {
return NO;
}
- (id)accessibilityElementAtIndex:(NSInteger)index {
return [self.voiceOverElements objectAtIndex:index];
}
- (NSInteger)accessibilityElementCount {
return self.voiceOverElements.count;
}
- (NSInteger)indexOfAccessibilityElement:(id)element {
return [self.voiceOverElements indexOfObject:element];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9155 次 |
| 最近记录: |