防止 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 从完成块内而不是下一行发送页面滚动通知,可以避免中断。
在主屏幕上,当您用三指滑动浏览主屏幕页面时,注意聚焦的应用程序如何在滑动时失去焦点,页面发生变化,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 从完成块内而不是下一行发送页面滚动通知,可以避免中断。