iOS辅助function隐藏“textField,双击编辑”通知

我有一个pickerView作为inputView的textField。

现在,当我开启配音并select文本字段时,配音将读取:“数量:3(textField的内容)”,然后是“textField”,然后是“双击编辑”。

无论如何,配音只是读取内容,并跳过下面的“textField。双击编辑”?

我试图给textField另一个UIAccessibilityTraits /提示,他们不工作。

谢谢!

假设你的文本字段是UITextField的一个子类,你正在寻找静态文本特征。

UITextField* aTextField = ..... aTextField |= UIAccessibilityTraitStaticText; 

在Swift中

 let textField = UITextField() textField.accessibilityTraits = UIAccessibilityTraitStaticText 

*这个答案中的示例代码是在Swift 3中编写和testing的。

关于accessibilityTraits属性

accessibilityTraits属性是一个UInt64 位掩码 。 UIKit包含了命名的UInt64常量,例如UIAccessibilityTraitStaticText ,以便于记住哪些位代表哪些设置。

当创buildUITextField时,其accessibilityTraits属性设置为“262144”,即二进制“1000000000000000000”。 这意味着右边的第19位表示“文本字段”。 这个设置没有一个常数。 我试过,但无法弄清楚如何将第19位设置为零。 这个位看起来不受UITextField实现的编辑的影响。 您可以inheritanceUITextField并重写accessibilityTraits属性来完全控制它,像这样…

覆盖accessibilityTraits

 private var _accessibilityTraits: UInt64 = 0 override var accessibilityTraits: UInt64 { get { return _accessibilityTraits } set { _accessibilityTraits = newValue } } 

使用UIAccessibilityTraitStaticText

如果“文本字段”标志打开或“1”,则VoiceOver将宣布“文本字段”。 正如@ChrisCM所发布的,如果“静态文本”标志也打开,它将取消“文本字段”标志,VoiceOver不会为控件types宣布任何内容。

“静态文本”标志是通过将十进制“64”添加到accessibilityTraits属性来进行二进制“1000000”的按位或运算来设置的。 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”进行按位或运算。 由于UITextField accessibilityTraits的原始值是受保护的,所以这不是必须的。

 textField.accessibilityTraits |= UIAccessibilityTraitStaticText 

指定一个不同的特质

要指定一个不同的特征,如“button”,按位或按如下所示的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添加“button”