VoiceOver无法读取UITextField子视图

时间:2015-12-03 15:05:57

标签: ios objective-c uitableview voiceover

我有一些我可以访问的自定义UITableViewCells。我正试图让VoiceOver在点击单元格时读取所有子视图。根据我的理解,这是你在使用或转发UITableViewCell时免费得到的东西(如果我错了就纠错我。)

问题出在我的一些细胞中。在我的大多数细胞中,一切都正确读取。但是,当我点击包含UITextField(或UITextField的子类)的单元格时,它不会读取UITextField。它将读取所有其他元素(除了一个单元格上的UIButton),但会跳过文本字段。

有谁知道它不会读取UITextFields的任何原因?还有一个UIButton?对于那些需要阅读的人,是否需要做一些特别的事情?或者我还没有做过UITableViewCell子类特别的事情吗?

很抱歉没有发布任何代码,我不确定哪些代码与发布相关,因为我在代码中根本没有看到任何与可访问性相关的内容。在故事板中,它被选择为我想要读取的所有元素都可访问,但是UITextFields似乎忽略了这个设置。

2 个答案:

答案 0 :(得分:1)

您要做的是创建自定义单元格类,并覆盖该类的accessibilityLabel属性。收集所有子视图辅助功能标签。我现在正在使用Windows机器,所以请原谅,如果这不能完全编译,但你应该明白这一点。

@implementation MyCustomCellViewClass

-(NSString*)accessibilityLabel {

    NSMutableString* result = [NSMutableString new];
    for (subview in [view accessibilityElementViews]) {
        [result append:subview.accessibilityLabel];
    }
    return result;
}

通过将其包含在属性覆盖中,而不是在其更改的所有潜在点上设置可访问性标签,可以消除未来开发人员对此行为的担忧。您还可以自动处理这些单元格中的动态元素,因为可访问性标签将与子视图的可访问性信息保持同步。然后,您可以将此类包含为任何未来子类的父类,以便轻松地维护此行为。如果你的任何开发人员都愚蠢到从继承树中删除这个子类,你就会遇到更大的问题!

确保使用此方法,您的单元格具有正确的角色。无论单元格的活动元素是什么(无论是标签,链接,按钮等)都应该是您的超级视图的角色。其他元素只是提供信息。

答案 1 :(得分:0)

让我们说你的表格单元格有4个元素,一个标签,一个按钮,一个文本字段,一个图像视图。所有这些元素都在您的tablecell的contentView中。

为了确保语音翻转能够读取表格单元格中的所有4个元素,您需要告诉您contentview包含4个元素的声音。您可以通过添加{{{{}中的所有元素来实现此目的。 1}}到contentView' s contentView数组。

accessibilityElements

然后,配音不会跳过这4个元素中的任何一个。