在主屏幕上,当您用三根手指滑动来导航主屏幕页面时,请注意聚焦的应用程序如何在滑动时失去焦点,页面发生更改,VoiceOver 宣布新的页码,然后强制聚焦第一个应用程序在那一页上。有一段时间,没有什么可以集中注意力。我的应用程序中有类似的界面,我需要做完全相同的事情。
现在,我发布一条公告来说明页码,然后以编程方式更改页面,但在 VoiceOver 自动将元素聚焦在新页面上然后宣布该标签之前,此公告没有机会完成。我的公告被打断了。
如何防止 VoiceOver 在 UIPageViewController
中切换页面时自动聚焦元素,或以其他方式获得所需的行为?
编辑:我发现您应该在页面更改时发布 UIAccessibilityPageScrolledNotification
,并且您可以提供一个字符串作为参数,VoiceOver 将宣布该字符串以声明新的页面位置。但是,我不相信,无法知道此通知何时完成,因此一旦讲话结束,我就无法强制聚焦。
最佳答案
如果您想提供自定义滚动状态公告,请实现 -accessibilityScrollStatusForScrollView:
为可访问性客户端提供滚动状态字符串。如果 -accessibilityScroll:
被覆盖,请改为发布 UIAccessibilityPageScrolledNotification
.
如果您想对公告进行排序,请注册UIAccessibilityAnnouncementDidFinishNotification
并从通知处理程序中发布屏幕更改通知。请注意通知字典中也存在 UIAccessibilityAnnouncementKeyWasSuccessful
键。
正如我们在评论中所讨论的,即使在尝试了上述方法之后,您也遇到了 UIPageViewController
导航问题,中断了您的公告。转换完成后发布 UIAccessibilityPageScrolledNotification
非常重要。用于交换页面的 UIPageViewController
方法 setViewControllers:direction:animated:completion:
接受完成 block 。通过从完成 block 内而不是下一行发布页面滚动通知,您可以避免中断。
关于ios - 防止 VoiceOver 自动聚焦于某个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27735284/