【问题标题】:Prevent VoiceOver from focusing on an object automatically防止 VoiceOver 自动聚焦在对象上
【发布时间】:2015-01-01 22:28:01
【问题描述】:

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

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

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

编辑:我看到您应该在页面更改时发布UIAccessibilityPageScrolledNotification,并且您可以提供一个字符串作为 VoiceOver 将宣布的新页面位置的参数。但是,我不相信这个通知什么时候结束,所以我不能在它说完后强制集中注意力。

【问题讨论】:

    标签: ios focus uipageviewcontroller voiceover uiaccessibility


    【解决方案1】:

    如果您想提供自定义滚动状态通知,请实现 -accessibilityScrollStatusForScrollView: 以向可访问性客户端提供滚动状态字符串。如果-accessibilityScroll: 被覆盖,请改为发布UIAccessibilityPageScrolledNotification。

    如果您想对公告进行排序,请注册UIAccessibilityAnnouncementDidFinishNotification 并从通知处理程序中发布您的屏幕更改通知。注意通知字典中UIAccessibilityAnnouncementKeyWasSuccessful 键的存在。

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

    【讨论】:

    • 我已将页面视图控制器的scrollView 的委托设置为self,但未调用accessibilityScrollStatusForScrollView。自我确实符合UIScrollViewAccessibilityDelegate. 我有什么遗漏吗?
    • UIAccessibilityPageScrolledNotification 是较旧的技术。您的类是否在其接口中声明自己符合UIScrollViewAccessibilityDelegate?该协议源自UIScrollViewDelegate。
    • 是的,它确实在其界面中确认UIScrollViewAccessibilityDelegate。
    猜你喜欢
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    相关资源
    最近更新 更多