12

我正在通过我们的 iOS 应用程序来解决可访问性问题。该应用程序的功能之一是用户可以在其中输入搜索查询的 UITextField。我已将该字段的 trait 设置为“搜索字段”,并且 VoiceOver 在大多数情况下都可以很好地处理该字段。当字段中有文本时,它会读取文本,然后说“搜索字段”。

我要解决的问题是 VoiceOver 如何处理占位符文本。当文本字段为空时,我们已设置占位符文本以显示示例查询。由于它显示为灰色文本,有视力的用户可以看到它只是占位符文本。但 VoiceOver 并没有为视障用户做出这种区分。它只是像普通文本一样读取占位符文本,没有额外的描述。

有没有办法向 UITextField 的占位符文本添加可访问性特征?还是人们通过其他方式解决了这个问题?

4

3 回答 3

3

从 UITextField 派生一个自定义类,如下所示(代码在 Swift 中,但您可以适应 Objective-C):

class MyTextField: UITextField {
    override public var accessibilityValue: String? {
        get { return self.text }
        set { super.accessibilityValue = newValue }
    }
}

将此类用作自定义类而不是 UITextField。当该字段为空时,这将阻止 VoiceOver 读取占位符文本。

然后将您的可访问性标签设置为例如“搜索”并将可访问性提示设置为您想要提示的任何内容(请参阅 Apple 的创建提示指南)。您可以通过编程方式分配这些值,但最好在 Interface Builder 中分配它们。

于 2016-08-21T06:35:47.370 回答
2

我相信您可以在 NSString 对象上设置accessibilityLabel 和其他可访问性属性,然后将该字符串用作占位符文本。Voiceover 将发现该属性并使用它。

NSString *placeholderText = @"Search";
placeholderText.accessibilityLabel = @"Try searching for xxxx";
field.placeholder = placeholderText;

类似的东西。未经测试,但我在 WWDC 开发者视频之一中看到了它。

警告:iOS 8.0 及更高版本中的行为与预期不同。

//In iOS 8+
NSString *placeholderText = @"Search"; //This will be announced
placeholderText.accessibilityLabel = @"Try searching for xxxx";//This will be ignored
field.placeholder = placeholderText;

这个答案应该被认为是过时的。

于 2012-07-17T14:23:52.720 回答
1

你不能。特征仅对可访问性元素有意义。让您的 UITextField 成为“静态文本”可能是不正确的。在文本字段中的项目上设置特征将无效,即使它可能是有效代码。

你可以做的是编辑控件的accessibilityLabel。

于 2015-08-13T00:08:49.637 回答