我有几个NSButtons只是图像,并且完全以编程方式设置。当VoiceOver读取这些按钮时,它们会为每个按钮显示“未选中复选框”。我想为VoiceOver设置一个属性来读取更具描述性(出于辅助目的),但我无法在按钮上设置title属性,因为标题将会显示(我只想显示图标) )。
我尝试使用
[self.button accessibilitySetOverrideValue:title forAttribute:NSAccessibilityDescriptionAttribute];
但没有改变。我也尝试过NSAccessibilityTitleAttribute,NSAccessibilityRoleDescriptionAttribute和NSAccessibilityRoleAttribute没有运气。我做错了吗?
感谢。
答案 0 :(得分:5)
看起来原始代码是正确的,但它仅在按钮单元格(而不是按钮本身)上调用时才有效。以上内容改为:
[self.button.cell accessibilitySetOverrideValue:title forAttribute:NSAccessibilityDescriptionAttribute];
其中title仍为NSString*
。假设标题为@"Test"
,上述代码会使VoiceOver读取“未经检查的复选框”。我发现它没有阅读“未选中复选框”部分的唯一方法是清除其他三个属性:NSAccessibilityTitleAttribute
,NSAccessibilityRoleDescriptionAttribute
和NSAccessibilityRoleAttribute
。我用@" "
覆盖了每一个。如果有人有一个更优雅的解决方案来忽略这些字段,请告诉我。现在,我会给这个回答。
答案 1 :(得分:1)
在Yosemite(10.10)中,您可以使用method-based accessibility 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的“调整”面板。右侧标签栏带有"快速修复","效果"和"调整" tabs实际上是一个带单选按钮的单选按钮组。此外,效果选项卡下的效果样本还包括步进器,复选框和按钮。