防止 VoiceOver 自动聚焦对象

Prevent VoiceOver from focusing on an object automatically

在主屏幕上,当您用三指滑动浏览主屏幕页面时,注意聚焦的应用程序如何在滑动时失去焦点,页面发生变化,VoiceOver 宣布新的页码,然后它强制聚焦该页面上的第一个应用程序。有一段时间什么都没有集中。我的应用程序中有一个类似的界面,我需要做完全相同的事情。

现在我 post 声明页码,然后我以编程方式更改页面,但是在 VoiceOver 自动将元素聚焦到新页面之前,这个声明没有机会完成,并且然后它宣布该标签。我的公告被打断了

如何防止 VoiceOver 在 UIPageViewController 中切换页面时自动聚焦元素,或者以其他方式获得所需的行为?

编辑:我看到您应该在页面更改时 post UIAccessibilityPageScrolledNotification 并且您可以提供一个字符串作为参数,VoiceOver 将宣布该字符串以说明新的页面位置。但是,我不相信没有办法知道这个通知何时结束,所以我不能在说完之后强制关注。

如果您想提供自定义滚动状态公告,请实施 -accessibilityScrollStatusForScrollView: to provide accessibility clients with a scroll status string. If -accessibilityScroll: is overridden, instead post an UIAccessibilityPageScrolledNotification

如果您想对通知进行排序,请在通知处理程序中注册 UIAccessibilityAnnouncementDidFinishNotification 和 post 您的屏幕更改通知。请注意通知字典中也存在 UIAccessibilityAnnouncementKeyWasSuccessful 键。

正如我们在评论中讨论的那样,即使在尝试了上述方法之后,您仍然遇到 UIPageViewController 导航中断您的公告的问题。转换完成后 post UIAccessibilityPageScrolledNotification 很重要。用于交换页面的 UIPageViewController 方法 setViewControllers:direction:animated:completion: 接受一个完成块。通过 post 从完成块内而不是下一行发送页面滚动通知,可以避免中断。