iOS辅助功能,如何在解除警报后使焦点返回到最后一项



我有一个按钮,当我点击该按钮时,会发出警报。

当我打开画外音并点击按钮,然后点击警报确定按钮以解除警报时,焦点将回到页面/后退按钮的顶部,而不是触发警报的按钮。

我正在使用这段代码将焦点移回按钮:

let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(0 * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
  UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, button)
})

问题是,在您解除警报后,焦点将回到顶部,首先读取标签,然后返回按钮。焦点不会直接指向按钮,这看起来很蹩脚。

我检查了一些苹果应用程序,发现他们取消警报后,焦点会回到警报弹出前的前一个元素。知道如何做到这一点吗?谢谢

我今天早些时候遇到了这个问题——我解决这个问题的方法是发布UIAccessibilityScreenChangedNotification而不是UIAccessibilityLayoutChangedNotification:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, button)

布局更改是针对视图当前上下文中布局的更改。屏幕更改用于用户在上下文中发生更改时使用,即解除警报并返回到呈现视图控制器。

你也可以去掉dispatch_after块——使用屏幕更改通知将为你提供与苹果应用程序相同的功能。

这里是一个答案链接,解释UIAccessibilityLayoutChangedNotification和UIAccessibility ScreenChangedNotification之间的区别。

最新更新