Начиная с iOS 13, можно добавить строковый атрибут для прямой озвучки, чтобы записать строки в виде отдельных букв и цифр.
Я не нашел способа направить UITextField
добавить этот атрибут к своему контенту. Однако для достижения этого подкласс UITextField
может переопределить его accessibilityValue
.
Приведенный здесь подкласс добавляет свойство для включения или отключения этого поведения.
final class AccessibilityTextField: UITextField {
var isAlphanumeric: Bool = false
override public var accessibilityAttributedValue: NSAttributedString? {
get {
guard let text = text, !text.isEmpty else {
return nil
}
return NSAttributedString(string: text, attributes: valueAttributes)
}
set {
// Ignore these values.
_ = newValue
}
}
private var valueAttributes: [NSAttributedString.Key: Any] {
guard #available(iOS 13.0, *), isAlphanumeric else {
return [:]
}
return [.accessibilitySpeechSpellOut: true]
}
}
Альтернативный подход приведенный в другой ответ здесь, который не использует функцию iOS 13 . accessibilitySpeechSpellOut
. Тем не менее, я видел, что это предположило, что это не идеально для систем вывода Брайля, поскольку они также используют accessibilityLabel
. Возможно, это хороший запасной вариант для систем до iOS 13.