VoiceOver未正确宣布UITextInput

时间:2017-11-06 23:48:52

标签: ios accessibility voiceover uiaccessibility

我有一个问题,VoiceOver在键盘焦点时宣布我的自定义UITextInput:当通过向左/向右滑动将辅助功能焦点移动到UITextInput视图时,VoiceOver正确地宣布了UITextInput,我是听到类似Text field, is editing, <content of text input>, character mode, insertion point at end的内容。

但是,如果我通过点击它来将辅助功能焦点移到UITextInput上,VoiceOver会说empty line,这是不正确的。

无论UITextInput如何获得辅助功能焦点,我都希望VoiceOver能够做出完全相同的声明。

任何想法可能是造成这种奇怪行为的原因吗?

1 个答案:

答案 0 :(得分:0)

要标记文本字段,您需要利用一些不同的属性。首先,只有让自定义控件扩展UITextFIeld类才能获得“文本字段”部分。这是你在一开始就可以获得公告而不影响其他事情的唯一方法。您可以将其附加到标签上。以下是我为您的自定义文本编辑器推荐的属性。

首选标记

  

ClassType:UITextField的子类(可能是最重要的部分)

     

AccessibilityLabel:输入文本代表的内容(例如:密码,用户名等)。

     

AccessibilityValue:输入的文字。

     

AccessibilityHint:“一些非关键信息,它们分享了有关输入信息的用途的详细信息。”

     

AccessibilityTraits :(不是静态文本特征)

请注意,提示不是至关重要的信息。提示经常被忽略,只包含有用的澄清信息。

备注标记(未推荐)

  

ClassType:????

的子类      

AccessibilityLabel:文本字段,$ EditingState,$ EnteredText,$ InsertionPoint

     

AccessibilityValue:nil

     

AccessibilityHint:nil

     

AccessibilityTraits:StaticText(很奇怪,但是如果你自己包含角色信息,我们希望在可编辑的文本字段上使用静态文本的特性,以避免VoiceOver变得聪明,包括它,并在公告中复制角色信息。这开始感觉像是一个黑客吗?)

这是一个可怕的想法,你真的应该让你的TextField从系统UITextField继承并免费获得所有这些东西,但是如果你必须这样,这就是你如何实现...类似的行为而不这样做。我说类似,因为有些东西你不能在自定义控件中复制。

  • 键盘类型(“字符模式”)比系统更难以抓取,我建议省略自定义案例。键盘不必遵守您的模式更改请求(自定义键盘等),您可能会遇到麻烦,并根据应用程序的设置混淆尝试共享此用户的用户。在所有情况下,系统是唯一可以做到这一点的系统。
  • 拐点。通过自定义方式,您将失去VoiceOver的风格和变形。标签和输入文本之间的暂停。读取占位符文本时读取的较低语音等。您可以在AccessibilityLabel中添加逗号以稍微复制其中一些,但最终,您的自定义控件对于VoiceOver用户来说总是听起来有点“关闭”。 。除非您的自定义视图扩展了UITextField ...