ios - 防止 VoiceOver 自动聚焦于某个对象

标签 ios focus uipageviewcontroller voiceover uiaccessibility

在主屏幕上,当您用三根手指滑动来导航主屏幕页面时,请注意聚焦的应用程序如何在滑动时失去焦点,页面发生更改,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/

相关文章:

ios - 当子类 UIView,Objective C 时,在重绘方法中得到奇怪的结果

javascript - 按向下箭头键关注列表项

ios - 如何从 UIColor 常量获取颜色名称

ios - 在 iOS 中录制音频并永久保存

javascript - Twitter Bootstrap 按钮事件状态

java - 错误或功能 : no focusOwner if control added to scene directly?

ios - 手动滚动到包含许多 subview 的页面时,带有 UIPageViewControllerTransitionStyleScroll 的 UIPageViewController 滞后

ios - PageViewController 不工作

objective-c - Objective c UIPageViewController 在翻转时移除阴影

iphone - 实际上使用 UIDatePickerModeCountDownTimer 作为计时器