这可能是显而易见的,但我之前从未做过NSAccessibility的任何工作,所以我假设我所要求的是一些我忽略的简单 .
我有一个NSTextField显示这样的持续时间,15:39 . 此文本字段是基于视图的NSTableView中NSTableCellView的子视图 .
当VoiceOver启用时,它当前会读取“一个五,三九”,这似乎完全没用 . 相反,我希望它说“持续时间是15分39秒 . ”
我可以生成所需的字符串,但我无法弄清楚我必须设置哪些可访问性属性才能实现 .
我已经尝试在IB中设置辅助功能描述,这无效(无论是在NSTextField还是NSTextFieldCell上设置) .
我还尝试重写 accessibilityValue: 和 accessibilityAttributeValue:forParameter: ,以便为:提供自定义属性值:
-
NSAccessibilityNumberOfCharactersAttribute
-
NSAccessibilityStringForRangeParameterizedAttribute
-
NSAccessibilityAttributedStringForRangeParameterizedAttribute
-
NSAccessibilityStringForRangeParameterizedAttribute .
这似乎是正确的轨道,因为这确实允许我用声音替换大声朗读的内容,但是,为NSAccessibilityVisibleCharacterRangeAttribute提供任何NSRange与“15:39”字符串的长度不匹配会导致语音完全跳过这个字段在读取NSTableCellView的内容时 . 所以,我能做的最好的事情就是让Voice over说“Durat”而不是读“15:39”:(
我试过的一切,我都试过NSTextField和NSTextFieldCell .
理想情况下,我更喜欢做我在iOS中所做的事情,只需设置NSTableCellView的accessibilityLabel,但我认为在AppKit中没有合理的方法 . 希望我只是遗漏了一些东西 .
3 回答
我只需在NSTextField上设置accessibilityValueDescription即可实现此目的 . 此方法是OS X 10.10及更高版本上新的Accessibility API的一部分 . 使用较旧的API,您可以使用
kAXValueDescriptionAttribute
来实现相同的功能 .我相信我已经回答了我自己的问题,至少足以控制点击表格单元格视图时读取的内容 .
通过重写 accessibilityIsIgnored 以在我的NSTableCellView子类中返回"NO",我能够通过覆盖单元格的NSAccessibilityTitleAttribute来准确指定我想要读取表格单元格的内容 . 在b / c我误解了 accessibilityIsIgnored 选择器的目的之前,我没有尝试过这个 .
从 accessibilityIsIgnored 的文档:
我希望能够准确控制将来为各个NSTextFields读取的内容,但控制整个NSTableCellView的读取内容实际上是我特定情况的理想选择 .
覆盖Voice Over读取的文本的解决方案比我想象的要简单得多 . 我所要做的就是覆盖为NSAccessibilityAttributedStringForRangeParameterizedAttribute返回的值: