在读取第一个单元格的标签之前如何使UICollectionView读取其自己的可访问性标签?

问题描述 投票:0回答:1

目前,我有一个包含UICollectionView的容器视图,该视图具有许多启用了可访问性的单元格。

[使用VoiceOver时,我可以循环浏览应用程序中的所有元素,当我进入容器视图时,它将循环浏览所有单元格及其标签(我没有启用任何可访问性方法或属性容器视图)。

但是,我希望为它分配一个可访问性标签给UICollectionView,以便VO在读取第一个单元格的可访问性标签之前先读取UICollectionView的可访问性标签FIRST。

即紧靠CollectionView标签上方的按钮:“按钮”CollectionView的标签:“过滤器栏”单元格1(默认选中)的标签:“运动”单元格2的标签:“雪佛兰”

场景:当用户选择“按钮”并向右滑动时,将选择表视图中的第一个单元格。

预期结果:VO的内容为:“筛选器栏,已选择,运动,按钮”

实际结果:VO的内容为:“已选择,运动,按钮”。

是否可以使VO首先读取集合视图的可访问性标签?

ios uitableview uicollectionview accessibility voiceover
1个回答
0
投票

UICollectionView可以看作是一个容器,其中嵌入了许多元素(它的单元格),并且按原样,您不能同时具有父视图((收集视图)]和其子视图((其单元格)]为VoiceOver的both accessible可以选择集合视图或其单元格

是否可以使VO首先读取集合视图的可访问性标签?

按照上面的说明,您不能使用当前配置。但是,一种解决方案可能是创建一个UIAccessbilityElement,用您想要读出的简单标签包装您的收藏夹视图:将在依次选择收藏夹视图单元格之前选择此元素。

最后,我强烈建议您看一下此detailed WWDC video中的演示,它可能为您的用例提供一些有用的技巧。

编辑 (在MarkS发表评论之后)

我正在尝试寻找一种包装方法,但是到目前为止,我一直没有成功。

此后尝试使用此代码段创建您的辅助功能元素:

class ViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let a11yWrapper = UIAccessibilityElement(accessibilityContainer: view!)

        a11yWrapper.accessibilityFrameInContainerSpace = CGRect.init(x: 40.0,
                                                                     y: 40.0,
                                                                     width: 100.0,
                                                                     height: 50.0)
        a11yWrapper.accessibilityLabel = "Filter Bar"
        a11yWrapper.accessibilityTraits = .staticText

        view.accessibilityElements = [a11yWrapper]
    }
}

使其适应您的应用程序环境,并且应使VO首先阅读集合视图的可访问性标签

文档中没有任何具体说明这种情况的示例。

我认为是因为您的设计不应该这样进行。通常,可以访问集合视图本身或其单元,而不是如前所述。

但是,根据您在帖子中所展示的内容,您也可以使用custom actions来达到目的:每个动作都将对应于一个特定的单元格……这绝对不是完美的,但是却尽其所能根据您的要求。

© www.soinside.com 2019 - 2024. All rights reserved.