3

我有一些 NSButtons 只是图像,并且完全以编程方式设置。当 VoiceOver 读取这些按钮时,它会为每个按钮显示“未选中复选框”。我想为 VoiceOver 设置一个更具描述性的属性(出于可访问性目的),但我无法在按钮上设置 title 属性,因为随后会显示标题(我只希望显示图标)。

我尝试使用

[self.button accessibilitySetOverrideValue:title forAttribute:NSAccessibilityDescriptionAttribute];

但没有任何改变。我还尝试了 NSAccessibilityTitleAttribute、NSAccessibilityRoleDescriptionAttribute 和 NSAccessibilityRoleAttribute,但没有成功。我做错了什么吗?

谢谢。

4

2 回答 2

4

看起来原始代码是正确的,但它仅在按钮单元(而不是按钮本身)上调用时才有效。以上改为:

[self.button.cell accessibilitySetOverrideValue:title forAttribute:NSAccessibilityDescriptionAttribute];

其中 title 仍然是NSString*. 假设 title 是@"Test",上面的代码会导致 VoiceOver 读取“Test unchecked checkbox”。我发现让它不读取“未选中复选框”部分的唯一方法是清除其他三个属性: NSAccessibilityTitleAttributeNSAccessibilityRoleDescriptionAttributeNSAccessibilityRoleAttribute. 我用@" ". 如果有人有更优雅的解决方案来忽略这些字段,请告诉我。现在,我会将此标记为已回答。

于 2011-12-08T18:02:48.367 回答
3

在 Yosemite (10.10) 中,您可以使用基于方法的可访问性 API来执行此操作:

例如,在自定义 NSView 中:

class CustomTabBarGroup: NSView, NSAccessibilityGroup {

    required init?(coder: NSCoder) {
        super.init(coder: coder)

        // We function as a tab group — closest in role is a radio button group
        self.setAccessibilityRole(NSAccessibilityRadioGroupRole)

        // You can also override what the role normally reads:
        self.setAccessibilityRoleDescription("Tab bar")
    }

    //...
}

并且,也许在一个开关按钮上,它的行为类似于您的应用程序中的单选按钮(例如,就像多个选项卡中的一个选定选项卡):

class CustomTabBarButton: NSButton {

    required init?(coder: NSCoder) {
        super.init(coder:coder)
        self.setAccessibilityRole(NSAccessibilityRadioButtonRole)
    }

    //...
}

有关采用此类角色的非标准外观控件的示例,请查看 iPhoto 的调整面板。带有“快速修复”、“效果”和“调整”选项卡的右侧选项卡栏实际上是一个带有单选按钮的单选按钮组。此外,“效果”选项卡下的效果样本是步进器、复选框和按钮。

于 2014-12-27T15:45:25.543 回答