Ke *_* MA 4 iphone accessibility uitextfield ios voiceover
我有一个textField,其中pickerView作为inputView.
现在,当我有画外音并选择textField时,画外音将读取:"数量:3(textField的内容)",然后是"textField",然后是"Double tap to edit".
无论如何都要让画外音只是阅读内容并跳过下面的"textField.双击编辑"?
我试图给textField另一个UIAccessibilityTraits/Hints,但它们不起作用.
谢谢!
假设您的文本字段是UITextField的子类,那么您正在寻找静态文本特征.
UITextField* aTextField = .....
aTextField |= UIAccessibilityTraitStaticText;
Run Code Online (Sandbox Code Playgroud)
let textField = UITextField()
textField.accessibilityTraits = UIAccessibilityTraitStaticText
Run Code Online (Sandbox Code Playgroud)
*本答案中的示例代码是在Swift 3中编写和测试的.
accessibilityTraits物业该accessibilityTraits属性是一个UInt64 位掩码.UIKit中包括命名UINT64常量如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
}
}
Run Code Online (Sandbox Code Playgroud)
如果"文本字段"标志打开或"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)")
Run Code Online (Sandbox Code Playgroud)
控制台输出:
original textField.accessibilityTraits, binary: 1000000000000000000, decimal: 262144
UIAccessibilityTraitStaticText, binary: 1000000, decimal: 64
modified textField.accessibilityTraits, binary: 1000000000001000000, decimal: 262208
Run Code Online (Sandbox Code Playgroud)
|= 操作者以下也有效.该|=运营商采用现有的值,并执行按位或为"1000000".由于UITextField accessibilityTraits受保护的原始值,这不是必需的.
textField.accessibilityTraits |= UIAccessibilityTraitStaticText
Run Code Online (Sandbox Code Playgroud)
要分配不同的特征,例如"按钮",按位OR,UIAccessibilityTraitButton如下所示:
textField.accessibilityTraits = UIAccessibilityTraitStaticText | UIAccessibilityTraitButton
print("modified textField.accessibilityTraits, binary: \(String(textField.accessibilityTraits, radix: 2)), decimal: \(textField.accessibilityTraits)")
Run Code Online (Sandbox Code Playgroud)
控制台输出:
modified textField.accessibilityTraits, binary: 1000000000001000001, decimal: 262209
Run Code Online (Sandbox Code Playgroud)
在这种情况下UIAccessibilityTraitStaticText取消"文本字段",同时UIAccessibilityTraitButton添加"按钮"
| 归档时间: |
|
| 查看次数: |
2605 次 |
| 最近记录: |