我正在开发具有辅助功能支持的iOS应用程序。在我的应用程序流程中的某个时刻,我提供了一个警报视图。在呈现视图之后,我想使用UIAccessibilityPostNotification关注视图,但是通知似乎被覆盖了。
[alertView show];
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,alertView.somesubView);
但是,我没有看到此通知的效果。可访问性焦点转到后台的其他视图对象。
然而,当我使用dispatch_after时有0延迟,它可以正常工作
[alertView show];
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW,0 * NSEC_PER_SEC);
dispatch_after(delay,dispatch_get_main_queue(), ^void(){
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,alertView.somesubView);
});
有人能解释一下是什么原因吗?
答案 0 :(得分:0)
你偶然发现了标准解决方案。用户界面或可访问性层次结构可能尚未更新,但反映了警报视图的存在。对主队列的异步调度可确保在发布通知之前执行所有其他排队任务,包括对用户界面或可访问性状态的任何更新。
也就是说,VoiceOver应该自动关注警报视图。您可能想要首先调查干扰此行为的内容。