【问题标题】:How do I force a button response to say a text vs its label?如何强制按钮响应说出文本与其标签?
【发布时间】:2021-12-06 19:04:23
【问题描述】:

场景:用户有 5 颗星(按钮)。每个按钮都有一个 UIAccessibility 标签来描述星星(“五中的第一颗星”等)。

问题:选择后,UIAccessibility 会重复标签。我想将其更改为“已选择”(或“您已选择第二颗星。”)。

尝试的解决方案:

我试图压制按钮的动作响应并获得沉默;我猜这是意料之中的。

cell.button2.accessibilityLabel = @"Second star of Five.";
cell.button2.accessibilityTraits += UIAccessibilityTraitStartsMediaSession;


但我也不想要标签的自动重复。
如何在选择每个星形按钮时完全控制“旁白”,以便用户理解选择而不是仅仅重复标签?


根据以下建议,我无法覆盖自定义按钮类的 accessibilityLabel。我有 ObjC 代码,但更喜欢使用 Swift。所以我试图将用 Swift 编写的自定义 UIButton 类合并到 ObjC 中。

【问题讨论】:

  • 仅出于 a11y 的目的,是否需要为每个星形设置一个专用按钮,或者是否可以将所有星形都包裹在一个对象中,像滑块一样工作,仅用于 VoiceOver 以提供所需的速率? ??????

标签: ios voiceover uiaccessibility


【解决方案1】:

定义一个CustomStarButton并覆盖- (NSString *)accessibilityLabel{}函数,如果被选中,返回@"你选择了第二颗星。"

【讨论】:

  • 我尝试按照您的建议进行操作,但无法覆盖accessibilityLabel。
  • override class func accessibilityLabel() - String? {}
  • 可能使用 SwiftUI 但不是使用 UIKit。
  • open override var accessibilityLabel: String? { get{ if (isSelected ? "" : "") } set { accessibilityLabel = newValue } }我对Swift不熟悉,也许你可以试试这个。
  • 我相信我已经尝试过这样的事情,但编译器抱怨。
最近更新 更多