跨多个元素的Interface Builder可访问性标签

时间:2012-11-28 17:18:08

标签: xcode interface-builder accessibility

是否有人知道如何为多个元素的可访问性标签跨越单一值?我有两个标签,形成一个标题行,屏幕阅读器分别读取它们。我试过选择这两个并应用设置但它不起作用。

编辑:

这是我的故事板的视图......

Storyboard accessibility settings

但是,当屏幕阅读器到达此点时,它会读取第一个标签(不使用辅助功能值),然后读取第二个标签。

enter image description here

3 个答案:

答案 0 :(得分:1)

我们可以使用UIAccessibilityElement类对元素进行分组,并使用accessibilityFrameInContainerSpace属性提供要组合的元素的组合框架。

//From Apple Docs
let profileElement = UIAccessibilityElement(accessibilityContainer: headerView)
profileElement.accessibilityLabel = profileNameLabel.text
profileElement.accessibilityValue = openPostsLabel.text
profileElement.accessibilityTraits |= UIAccessibilityTraitButton     // Tells VoiceOver to treat our new view like a button

let combinedLabelFrame = profileNameLabel.frame.union(openPostsLabel.frame)
let profileElementFrame = combinedLabelFrame.union(profileImageView.frame) //providing union of frames.
// This tells VoiceOver where the element is on screen so a user can find it as they touch around for elements
profileElement.accessibilityFrameInContainerSpace = profileElementFrame

检查苹果文档Whats new in accessibility

sample app的链接,说明如何操作。

答案 1 :(得分:0)

我最终解决了这个问题...

我将第一个元素的标签值设置为“Transfection Search”,并清除并禁用第二个元素的辅助功能设置。这样,屏幕阅读器读取第一个项目值并完全跳过第二个项目。

它仍然只突出显示第一个元素,但我认为没有办法对元素进行分组并将可访问性属性应用于所有元素。

答案 2 :(得分:0)

我在UIStackView中有两个标签-因此我在实际标签上禁用了可访问性,然后为堆栈视图启用了可访问性。在Xcode 10中,UIStackView在Interface Builder中没有“可访问性”部分,因此我要做的是在 Identity Inspector>用户定义的运行时属性下添加两个自定义属性。我添加了一个设置为{{1}的名为Bool的{​​{1}}和一个设置为所需文本的名为isAccessibilityElement的{​​{1}}。当然,如果您希望通过编程方式对此进行更新,则可以将true创建到String并在代码中设置值。