2012-04-12 39 views
5

我正在通过我们的iOS应用程序修复可访问性问题。该应用程序的功能之一是用户可以输入搜索查询的UITextField。我将该领域的特点设定为“搜索领域”,而VoiceOver大多数时间都在该领域做得很好。当字段中有文本时,它会读取文本,然后显示“搜索字段”。如何为UITextField中的占位符文本设置可访问性特征?

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

有没有办法将可访问性特征添加到UITextField的占位符文本?或者让人们通过其他方式解决这个问题?

回答

0

我相信你可以在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; 

此答案应视为过期。

+0

这是不合情理的。特质仅适用于UI对象。 – ChrisCM 2015-08-13 00:07:22

+0

除了他们没有,我想:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/UIKitUICatalog/UISegmentedControl.html#//apple_ref/doc/uid/TP40012857-UISegmentedControl-SW16 – 2015-08-14 23:57:36

+0

这是指分段控制和可访问性标签不是特征。请看这个开放源代码库,看看为什么你的解决方案实际上是非感性的,也是为什么特征不适用于NSString对象,甚至当它们应用于分段控件时。分段控件恰好是NSStrings上的accessibilityLabels的一个例外,虽然我没有评论这些。但是,在我的演示中,您将会看到,此例外不适用于占位符文本,正如OP所要求的那样。 https://github.com/chriscm2006/iOS-Traits-on-NSStrings – ChrisCM 2015-08-15 01:54:50

0

你不行。特征只对可访问性元素有意义。对于你的UITextField是“静态文本”可能是不正确的。即使它可能是有效的代码,在文本字段内的项目上设置特征将不起作用。

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

0

派生从的UITextField一个自定义类,如下所示(代码是斯威夫特,但你能适应的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中指定它们。

相关问题