如何在UITextField中为占位符文本设置辅助功能特征?

时间:2012-04-12 19:39:53

标签: ios uitextfield voiceover

我正在浏览我们的iOS应用以修复辅助功能问题。该应用程序的一个功能是UITextField,用户可以在其中输入搜索查询。我已将该字段的特征设置为“搜索字段”,而VoiceOver在大多数情况下都可以很好地处理该字段。当字段中有文本时,它会读取文本,然后显示“搜索字段”。

我想解决的问题是VoiceOver如何处理占位符文本。当文本字段为空时,我们设置占位符文本以显示示例查询。由于它显示为灰色文本,因此有视力的用户可以看到它只是占位符文本。但VoiceOver并没有为视障用户做出这样的区分。它只是以与常规文本相同的方式读取占位符文本,没有额外的描述。

有没有办法在UITextField的占位符文本中添加辅助功能特征?或者让人们通过其他方式解决这个问题?

3 个答案:

答案 0 :(得分:2)

我相信您可以在NSString对象上设置accessibilityLabel和其他辅助功能属性,然后将该字符串用作占位符文本。画外音将发现该属性并使用它。

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;

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

答案 1 :(得分:1)

你做不到。特征仅对辅助功能元素有意义。对于你的UITextField来说,“静态文本”可能不正确。即使它可能是有效的代码,在文本字段中设置项目的特征也不起作用。

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

答案 2 :(得分:0)

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

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

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

然后将您的辅助功能标签设置为例如“搜索”和可访问性提示您要提示的任何内容(请参阅Apple的Guidelines for Creating Hints)。您可以以编程方式分配这些值,但最好在Interface Builder中分配它们。