setAccessibilityLabel和accessibilityIdentifier在ios中有什么区别?

我一直在通过我们的代码库,并在我们所有的button和文本字段上设置accessibilityIdentifier属性,以便我可以使用UIAutomation访问它们。 在这样做的时候,我遇到了一些已经存在的代码。

[_goodButton setAccessibilityLabel:@"off"]; 

我找不到有关这两种方法之间的区别的文档。 看起来他们做同样的事情。 有人知道吗? 我觉得这个标签也被设置为“off”。

而不是使用accessibilityLabel (见下文),你应该使用accessibilityIdentifier

这个github问题解释了这个区别:

鉴于accessibilityLabel是可访问性屏幕阅读器实际使用的外向string(并且应该本地化为设备用户的语言),Apple现在提供了专门用于UI自动化目的的备用属性(iOS 5+)

这两个属性肯定有些混乱。 我自己陷入了同样的陷阱。 但是使用VoiceOver和UI自动化testing的研究和实验显示出明显的差异。

accessibilityLabel
这是VoiceOver向最终用户读取的值。 因此,这应该是一个本地化的string。 如果可能的话,最好把它保留在一个单词中(即“帮助”,“播放”,“新注”等)。它也应该是大写,但不能在一段时间内结束。 这有助于VoiceOver的发音。

因为这是最终用户,所以作为用户testing的一部分,开发人员可以根据需要将其更改为更清晰。 例如,它可能会从“播放”更改为“阅读评论”。 因此,您不希望将其与自动化testing绑定在一起,因为这样的更改会打破任何涉及现在不存在的“播放”标签的testing。 这就是accessibilityIdentifier来的地方。

accessibilityIdentifier
accessibilityLabel类似, accessibilityIdentifier通过可accessibilityIdentifier标识一个元素,但与accessibilityLabel不同, accessibilityIdentifier 并不意味着被最终用户读取,因此也不会被本地化。 它的目的纯粹是用作UI自动化testing的标识符,因此开发者应该使用对testing过程有意义的值。 这很好,可能与accessibilityLabel的非本地化值相同,但不一定是。 例如,你可以使用像“HelpButton”这样的名称,它对UItesting有意义,但最终用户永远不会看到。

最重要的是,由于这是accessibilityLabel一个单独值,所以使用它可以确保您的UI自动化testing永远不会因为调整用户公开的VoiceOver内容而中断。

无障碍提示 (包括完整性)
accessibilityHint适用于accessibilityLabel可能不够清晰的情况。 由于accessibilityLabel应尽可能保留一个单词,因此accessibilityHint可以提供其他上下文。 但是,如果accessibilityLabel本身具有足够的performance力,则应该将accessibilityHint留空。

如果确定需要accessibilityHint ,则将其保存为一个简短的句子片段,大写并在一个句点结束。 它应该描述它做了什么,而不是告诉你该做什么(即“播放当前曲目”,而不是“播放当前曲目”,因为后者听起来像是给你的指令,而不是它做的)。

希望有所帮助!

你检查这一个

可访问性标签和标识符属性标签属性和标识符属性在您的脚本访问UI元素的能力中突出显示。 了解如何使用它们非常重要。

为标签属性设置有意义的值是可选的,但build议使用。 您可以在Interface Builder的“标识”检查器的“辅助function”部分的“标签”文本字段中设置和查看标签string。 预计这个标签是描述性的,但很短,部分原因是辅助技术,如苹果公司的VoiceOver使用它作为关联UI元素的名称。 在UI自动化中,该标签由标签方法返回。 如果没有设置标识符属性,它也会通过名称方法作为默认返回。 有关详细信息,请参阅UIAccessibilityElement类参考。

标识符属性允许您为元素使用更多的描述性名称。 它是可选的,但必须为脚本设置以执行以下两个操作之一:

通过名称访问容器视图,同时还可以访问其子项。 通过名称访问UILabel视图以获取其显示的文本(通过其value属性)。 在UI自动化中,name方法返回这个标识符属性的值(如果有的话)。 如果未设置,则name方法将返回label属性的值。

目前,您只能通过accessibilityIdentifier属性以编程方式设置标识符属性的值。 有关详细信息,请参阅UIAccessibilityIdentification Protocol Reference。

AccessibilityLabel是VoiceOver读取给最终用户的值。 因此,这应该是一个本地化的string。 文本也应该大写。 因为这有助于VoiceOver的发音。 accessibilityLabel用于testing和视觉受损用户。

AccessibilityIdentifier通过可访问标识一个元素,但与accessibilityLabel不同,accessibilityIdentifier的目的纯粹被用作UI自动化testing的标识符。 我们使用一个值来testing过程