iOS 在 uiviewcontroller 上显示的自定义视图的画外音

iOS voiceover for custom view displayed over uiviewcontroller

我有一个 UIViewController 让我们称它为 MainViewController,一个子控制器实例(UITableViewController 类型的 ChildViewController)被添加到 MainViewController ChildViewController 的可访问性已设置,画外音也可以正常工作。

MainViewController 有一个工具栏按钮,点击后会显示一个自定义视图,如下所示

//CustomView class
func show() {
    UIView.animate(withDuration:0.5, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 5, options: .curveEaseInOut, animations: {
        self.disabledLayer.backgroundColor = UIColor.init(white: 0, alpha: 0.55)
        self.transform = .identity
    }, completion: {
        (value: Bool) in
        self.accessibilityElements = [titleLabel, closeButton] // titleLabel, closeButton are added dynamically to the view and are of type UILabel and UIButton respectively
    })
}

通过这样做,画外音从未用于到达(读取)自定义视图元素。经过一些研究后,在工具栏按钮点击处理程序中向 MainViewController 添加了以下行

UIAccessibility.post(notification: .screenChanged, argument: actionView)

在此之后画外音开始读取自定义视图中的元素,并且可以使用左右交换在元素中导航。

但是问题是当我点击 CustomView 中的任何元素时,它没有被选中和读取,而是选中了背景中的 ChildViewController 的元素并且在那个点击位置阅读。

在 Swap 上,按预期工作

问题 - 当点击关闭按钮时,子视图控制器中处于后台的元素被选中

注意:CustomView 有一个具有半透明背景颜色的子视图

提前致谢

自定义视图是模态视图,显示在当前uiviewcontroller之上。

已将以下行添加到解决了问题的 CustomView。

self.accessibilityViewIsModal = true

此处 VoiceOver 会忽略视图中与接收者同级的元素。

Refer Apple's doc for more details