【问题标题】:How to add VoiceOver on NSTabViewItem?如何在 NSTabViewItem 上添加旁白?
【发布时间】:2022-08-22 18:56:07
【问题描述】:
画外音通常使用accessibilityRole 实例方法实现。例如,我可以在按钮上使用它
button.accessibilityRole = NSLocalizedString(@\"Button\", nil);
但是当我在 NSTabViewItem 上使用它时,
NSTabViewItem *item0 = [NSTabViewItem tabViewItemWithViewController:self.tab0];
item0.acessibilityRole = NSLocalizedString(@\"Tab 0\",nil);
我收到一条错误消息
在类型为 \'NSTabViewItem *\' 的对象上找不到属性 \'accessibilityRole\'
编辑:我也试过accessibilityLabel。
标签:
objective-c
macos
accessibility
voiceover
nstabview
【解决方案1】:
accessibilityLabel 通常在 Views 上调用,所以我在 NSView 上使用了它。
NSView * cellView = [NSView newAutoLayoutView];
cellView.accessibilityLabel = "label";
【解决方案2】:
这里有几个问题。
- 您没有为视图或单元格的
accessibilityRole 设置本地化值,而是使用NSAccessibilityRole 类型之一。
- 您通常不应该在视图/单元格上设置
accessibilityRole,而是首先实例化正确类型的对象。例如,与其创建一个类型为 button 的按钮,然后将其角色设置为NSAccessibilityCheckBoxRole,不如只创建一个复选框。然后角色将被正确设置。通常,您唯一需要在视图上设置accessibilityRole 的情况是滚动您自己的视图。
- 该角色仅用于提供有关种类VoiceOver 已选择的对象。在选项卡视图的情况下,选项卡视图本身的正确角色有
NSAccessibilityTabGroupRole,每个选项卡都有NSRadioButtonRole。当您使用 NSTabView 时,这将自动发生。请注意,您永远不会使用“Tab 0”角色,它将标签与角色混为一谈。
- 在按钮或任何其他带有单元格的对象上设置可访问性属性时,不应使用
NSView(NSButton 实例)。相反,您需要使用NSCell(NSButtonCell,通过button.cell 到达)。例如。 button.cell.accessibilityLabel = NSLocalizedString("Cancel", nil); 虽然许多 AX 属性从单元格传递到视图,但有些不是。此外,不同的辅助功能技术(VoiceControl、VoiceOver、SwitchControl)对此或多或少有严格要求。您应该始终在单元格上进行适当的设置,以与最广泛的 AX 技术兼容。
- 确定您的应用程序应该做什么的最佳方法是在 Apple 产品中找到类似的 UI,并使用 Accessibility Inspector 探索 AX 层次结构。