有没有办法将UITextField的辅助功能标签设置为“文本字段”以外的其他标签。因此,我不想调用“文本字段”,而是将其命名为“代码验证字段”。
答案 0 :(得分:3)
My advice would be to not try to outsmart the system on build-in Voice Over outputs.
"Text field is editing" is to a blind user the audible equivalent to "This item is selected and there is a blinking cursor in it".
Same as you are unlikely to remove/change the blinking cursor from your UITetxtField you shouldn't try to remove/change that built in output.
Feel free to use the accessibilityLabel
and accessibilityHint
to add more context to this field.
答案 1 :(得分:2)
我相信你必须设置字段的accessibilityLabel
属性(UIAccessibility
协议的一部分)。也许您还必须使用accessibilityTraits
属性来覆盖UIKit标签。
答案 2 :(得分:2)
我发布了一个related answer,说明了阻止VoiceOver宣布UITextField的“文本字段”的几种方法。
这是该答案的代码摘录。
let textField = UITextField()
textField.accessibilityTraits = UIAccessibilityTraitStaticText
您可以将accessibilityHint用作您想要的“代码验证字段”的备用控件名称
textField.accessibilityHint = "code verification field"
accessibilityLabel
也可以。实际差异在于先读取accessibilityLabel
,然后读取textField.text
(在UITextField中输入的文本),然后读取accessibilityHint
。
以下内容为:“标签,文字,(短暂暂停...)提示”
textField.accessibilityTraits = UIAccessibilityTraitStaticText
textField.accessibilityLabel = "label"
textField.text = "text"
textField.accessibilityHint = "hint"
您可以找到有关UIAccessibility Element properties in Apple's API reference的更多信息。
答案 3 :(得分:1)
据我所知,Voice over在文本字段时读取accessibilityLabel,accessibilityHint,“文本字段正在编辑”。在更改特征之前无法更改此内容。
您可以将特征更改为UIAccessibilityTraitNone
,这样就不会将其视为“文本字段正在编辑”。
答案 4 :(得分:1)
使用当前建议更新此问题。
超越UIKit提供的可访问性属性覆盖UIKit的默认可访问性处理是不合适的。使用accessibilityLabel,accessibilityHint,accessibilityTraits等
UITextField内置了可访问性,并处理角色和状态信息,以为VoiceOver用户提供一致且强大的体验。您可以使用accessibilityTraits禁止显示某些VoiceOver通知,但这并不意味着您应该这样做。
在这种情况下,最合适的方法是简单地设置一个合适的标签: myTextField.accessibilityLabel =“代码验证”
这将导致VoiceOver宣布“代码验证,文本字段正在编辑”,这是用户期望听到的。
请注意,accessibilityHint可以由用户关闭,因此该属性不应用于基本的消息传递或信息。