【问题标题】: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】:

      这里有几个问题。

      1. 您没有为视图或单元格的accessibilityRole 设置本地化值,而是使用NSAccessibilityRole 类型之一。
      2. 您通常不应该在视图/单元格上设置accessibilityRole,而是首先实例化正确类型的对象。例如,与其创建一个类型为 button 的按钮,然后将其角色设置为NSAccessibilityCheckBoxRole,不如只创建一个复选框。然后角色将被正确设置。通常,您唯一需要在视图上设置accessibilityRole 的情况是滚动您自己的视图。
      3. 该角色仅用于提供有关种类VoiceOver 已选择的对象。在选项卡视图的情况下,选项卡视图本身的正确角色有NSAccessibilityTabGroupRole,每个选项卡都有NSRadioButtonRole。当您使用 NSTabView 时,这将自动发生。请注意,您永远不会使用“Tab 0”角色,它将标签与角色混为一谈。
      4. 在按钮或任何其他带有单元格的对象上设置可访问性属性时,不应使用NSViewNSButton 实例)。相反,您需要使用NSCellNSButtonCell,通过button.cell 到达)。例如。 button.cell.accessibilityLabel = NSLocalizedString("Cancel", nil); 虽然许多 AX 属性从单元格传递到视图,但有些不是。此外,不同的辅助功能技术(VoiceControl、VoiceOver、SwitchControl)对此或多或少有严格要求。您应该始终在单元格上进行适当的设置,以与最广泛的 AX 技术兼容。
      5. 确定您的应用程序应该做什么的最佳方法是在 Apple 产品中找到类似的 UI,并使用 Accessibility Inspector 探索 AX 层次结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-22
        • 1970-01-01
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多