Ios VoiceOver和异步UITableView

Ios VoiceOver和异步UITableView,ios,swift,uitableview,cocoa-touch,voiceover,Ios,Swift,Uitableview,Cocoa Touch,Voiceover,在我的应用程序中,我有一个异步数据加载的UITableView:加载视图控制器时,我显示一个模式活动微调器并启动HTTP请求。完成后,我隐藏微调器并在表视图上执行reloadData()。我还返回响应?计数??0作为多行,以确保列表在数据尚未准备就绪时最初为空 它就像一个符咒,但我对画外音有一个问题:当打开视图控制器时,画外音进入表格并显示“空列表”。加载数据时,它将转到表的最后一个元素 这种行为不是很理想:我希望VoiceOver在表为空时不聚焦表(不需要聚焦模态微调器,因为加载时已经有声音)

在我的应用程序中,我有一个异步数据加载的
UITableView
:加载视图控制器时,我显示一个模式活动微调器并启动HTTP请求。完成后,我隐藏微调器并在表视图上执行
reloadData()
。我还返回
响应?计数??0
作为多行,以确保列表在数据尚未准备就绪时最初为空

它就像一个符咒,但我对画外音有一个问题:当打开视图控制器时,画外音进入表格并显示“空列表”。加载数据时,它将转到表的最后一个元素

这种行为不是很理想:我希望VoiceOver在表为空时不聚焦表(不需要聚焦模态微调器,因为加载时已经有声音),然后在加载时转到第一个元素


我可以怎么做?

您想将加载覆盖屏幕设置为模式视图。模态意味着视图背后的东西是不可操作的(或者画外音不可聚焦)

然后,您可能还需要在这些样式中使用辅助功能通知

//Announce that content is loading directly 
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "Stuff is laoding");


这将导致焦点移到该视图。

目前还不清楚问题出在哪里。画外音焦点控制或ViewController加载时发生的情况。绝对不应该对画外音隐藏可见视图。那里有一张桌子,而且是空的,这一点很重要。话虽如此,但在ViewController加载的第二次加载时,可能不应该共享这些内容,而且还存在动态内容问题。最初,你也许可以做一些更明智的事情,专注于。。。但是很难理解你的布局和你解释的实际问题。。。图片???这只是一个空的ViewController,有一个全屏的UITableView。没有必要说加载时有一个空列表,因为它是控制器中唯一的视图,并且我们在应用程序中到处播放一种特定的加载声音。我知道画外音描述了屏幕上出现的内容,但说加载时有一个空列表不是很相关,会污染体验。如果有列表,应该可以访问。如果它不相关,为什么一开始就出现在屏幕上???如果您想“不污染体验”,请向所有人隐藏列表,直到有数据为止。想知道什么是被污染的体验吗?视力不全的用户“看到”viewcontroller上的视图,希望获得更多信息,在视图上运行手指,期望得到有用的反馈,但有一些善意(但最终无知)的开发人员对VoiceOver隐藏了该视图。这是一个被污染的体验。这是一个为视障人士设计的应用程序。用户将“看到”一个带有加载微调器的后屏幕,然后是一个包含整个屏幕的列表。我不希望画外音说“空列表”,我希望它说“加载”,很明显,这是一款针对视力受损者的应用程序,我们在谈论可访问性和焦点等等:)。好了,有一个加载屏幕占据了整个屏幕。此加载屏幕应为模态。你让它听起来像是列表旁边有一个加载微调器。同样,图像有助于。。。但是,你想要的是你的加载图像是模态的。将在代码中显示。我是否可以直接使用
UIActivityIndicatorView
而不使用情节提要来实现同样的效果?是的,您可以在空列表旁边设置微调器,并让它们都处于焦点:)。老实说,您可以使用一些方法直接使用可访问性API隐藏内容。但它们是黑客,导致其他ATs无法获得解决方案。这是正确的解决方案,您应该使用它,添加一个带有微调器的XIB并正确地执行它是“最少代码行”解决方案的最小额外工作,这是一个荒谬的可访问性API攻击,我不想分享,当一个“正确的”非黑客解决方案可用时,显然是正确的选择。
//Announce that content is loading directly 
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "Stuff is laoding");
//Shift focus to the view in your modal that is sharing the status of the loading content.
UIAccessibilityPostNotification(UIAccessibilityLayoutChanged, spinnerView);