在日历中,当您创建新事件时,如果您点击启用了VoiceOver的全天单元格,Siri会打开/关闭全天开关按钮,双击以更改设置"。实际上,双击将切换开关。此外,它不可能仅仅点击切换开关本身 - 您必须与单元本身交互以切换开关,交换机本身不是可访问的元素。
在我的应用程序中,我使用标签和开关进行完全相同的设置。但是当我在启用VoiceOver的情况下点击单元格时,它只会读取标签,因此盲人用户不知道该单元格中有一个切换开关。如果他们点击开关本身,那么他们就可以与之交互,因此它与日历应用中的设置相反。
如何获得Apple实施的相同行为?我需要一些方法将开关组合到单元格中,以便VoiceOver在突出显示单元格时读取它们,然后当它们双击它时应该切换开关,并且我不确定如何完成该设置。谢谢!
答案 0 :(得分:10)
要实现所需的行为,而不是将UISwitch
放在单元格的contentView
中,请以编程方式将其添加为accessoryView
。然后,在使用VoiceOver时,单元格和开关的行为与预期完全一致,就像在日历中一样。
答案 1 :(得分:1)
您应该能够使用
在单元格上设置自定义辅助功能描述cell.accessibilityLabel = @"Double tap to toggle setting";
您可以根据以下答案设置VoiceOver运行时的自定义手势:
https://stackoverflow.com/a/12337128/567511
但是在这里你不需要自定义手势,而didSelectRowAtIndexPath
仅在UIAccessibilityIsVoiceOverRunning
为真时才会翻转开关。
答案 2 :(得分:1)
我想详细说明the answer of Joey,并澄清如何在代码中实现此问题的解决方案。
在 tableView:cellForRowAtIndexPath:中,创建一个自定义UISwitch视图并将其附加到单元格的accessoryView。这可能类似于以下内容。
UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
[switchView setOn:NO];
[switchView addTarget:self action:@selector(selector:) forControlEvents:UIControlEventValueChanged];
cell.accessoryView = switchView;
return cell;
现在,该单元的行为与任何已知的本机iOS开关相同。 设置或日历。在启用VoiceOver的情况下双击单元格,现在将切换UISwitch(开/关),VoiceOver将自动通知用户有关交换机的状态以及可访问性提示。