我有一个按钮,当我点击该按钮时,会发出警报。
当我打开画外音并点击按钮,然后点击警报确定按钮以解除警报时,焦点将回到页面/后退按钮的顶部,而不是触发警报的按钮。
我正在使用这段代码将焦点移回按钮:
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之间的区别。