0

我正在开发具有可访问性支持的 iOS 应用程序。在我的应用程序流程中的某个时刻,我呈现了一个警报视图。呈现视图后,我想专注于使用 UIAccessibilityPostNotification 的视图,但是通知似乎被覆盖了。

[alertView show];
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,alertView.somesubView);

但是我看不到此通知的效果。可访问性焦点转到背景中的某个其他视图对象。

但是,当我以 0 延迟使用 dispatch_after 时,它可以工作

[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);
  });

有人可以解释是什么原因吗?

4

1 回答 1

0

您偶然发现了标准解决方案。用户界面或可访问性层次结构可能尚未更新,以反映警报视图的存在。对主队列的异步调度确保所有其他入队任务,包括对用户界面或可访问性状态的任何更新,在发布通知之前执行。

也就是说,VoiceOver 应该自动聚焦警报视图。您可能想首先调查是什么干扰了这种行为。

于 2014-08-18T16:50:46.660 回答