我有一个textField,其中pickerView作为inputView。
现在,当我打开画外音并选择textField时,配音将会读取:"数量:3(textField的内容)",然后" textField",然后"点击两次即可编辑"。
无论如何都要让画外音只是阅读内容并跳过以下" textField。双击即可编辑"?
我试图给textField另一个UIAccessibilityTraits / Hints,但它们无效。
谢谢!
答案 0 :(得分:6)
let textField = UITextField()
textField.accessibilityTraits = UIAccessibilityTraitStaticText
*本答案中的示例代码是在Swift 3中编写和测试的。
accessibilityTraits
财产 accessibilityTraits
属性为UInt64
bitmask。 UIKit包含named UInt64 constants,例如UIAccessibilityTraitStaticText
,以便于记住哪些位代表哪些设置。
创建UITextField时,其accessibilityTraits
属性设置为“262144”,二进制为“1000000000000000000”。这意味着右边的第19位表示“文本字段”。此设置没有常量。我尝试但无法弄清楚如何将第19位设置为零。该位似乎受到UITextField实现的编辑保护。您可以继承UITextField并覆盖accessibilityTraits属性,以完全控制它... ...
覆盖accessibilityTraits
private var _accessibilityTraits: UInt64 = 0
override var accessibilityTraits: UInt64 {
get {
return _accessibilityTraits
}
set {
_accessibilityTraits = newValue
}
}
如果“文本字段”标志打开或“1”,则VoiceOver将宣布“文本字段”。正如@ChrisCM发布的那样,如果“静态文本”标志也打开,它会取消“文本字段”标志,而VoiceOver不会宣布任何控件类型。
“静态文本”标志是通过将十进制“64”添加到accessibilityTraits属性执行二进制“1000000”的按位OR来设置的。 UIAccessibilityTraitStaticText
常量使这个值易于记忆。
此代码说明了正在发生的事情:
详细添加UIAccessibilityTraitStaticText
到accessibilityTraits
let textField = UITextField()
print("original textField.accessibilityTraits, binary: \(String(textField.accessibilityTraits, radix: 2)), decimal: \(textField.accessibilityTraits)")
print("UIAccessibilityTraitStaticText, binary: \(String(UIAccessibilityTraitStaticText, radix: 2)), decimal: \(UIAccessibilityTraitStaticText)")
textField.accessibilityTraits = UIAccessibilityTraitStaticText
print("modified textField.accessibilityTraits, binary: \(String(textField.accessibilityTraits, radix: 2)), decimal: \(textField.accessibilityTraits)")
控制台输出:
original textField.accessibilityTraits, binary: 1000000000000000000, decimal: 262144
UIAccessibilityTraitStaticText, binary: 1000000, decimal: 64
modified textField.accessibilityTraits, binary: 1000000000001000000, decimal: 262208
|=
运营商以下也有效。 |=
运算符采用现有值,并按“1000000”进行按位OR运算。由于UITextField
accessibilityTraits
的原始值受到保护,因此不需要这样做。
textField.accessibilityTraits |= UIAccessibilityTraitStaticText
分配不同的特征,例如“按钮”,按位OR UIAccessibilityTraitButton
,如下所示:
textField.accessibilityTraits = UIAccessibilityTraitStaticText | UIAccessibilityTraitButton
print("modified textField.accessibilityTraits, binary: \(String(textField.accessibilityTraits, radix: 2)), decimal: \(textField.accessibilityTraits)")
控制台输出:
modified textField.accessibilityTraits, binary: 1000000000001000001, decimal: 262209
在这种情况下,UIAccessibilityTraitStaticText
取消“文字字段”,UIAccessibilityTraitButton
添加“按钮”
答案 1 :(得分:5)
假设您的文本字段是UITextField的子类,那么您正在寻找静态文本特征。
UITextField* aTextField = .....
aTextField |= UIAccessibilityTraitStaticText;