iOS辅助功能隐藏" textField,双击以编辑"公告

时间:2016-03-10 21:37:26

标签: ios iphone uitextfield accessibility voiceover

我有一个textField,其中pickerView作为inputView。

现在,当我打开画外音并选择textField时,配音将会读取:"数量:3(textField的内容)",然后" textField",然后"点击两次即可编辑"。

无论如何都要让画外音只是阅读内容并跳过以下" textField。双击即可编辑"?

我试图给textField另一个UIAccessibilityTraits / Hints,但它们无效。

谢谢!

2 个答案:

答案 0 :(得分:6)

在Swift中

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
    }
}

使用UIAccessibilityTraitStaticText

如果“文本字段”标志打开或“1”,则VoiceOver将宣布“文本字段”。正如@ChrisCM发布的那样,如果“静态文本”标志也打开,它会取消“文本字段”标志,而VoiceOver不会宣布任何控件类型。

“静态文本”标志是通过将十进制“64”添加到accessibilityTraits属性执行二进制“1000000”的按位OR来设置的。 UIAccessibilityTraitStaticText常量使这个值易于记忆。

此代码说明了正在发生的事情:

详细添加UIAccessibilityTraitStaticTextaccessibilityTraits

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;