【问题标题】:How to make a UICollectionView read its own accessibility label before reading out its first cell's label?如何让 UICollectionView 在读取其第一个单元格的标签之前读取其自己的可访问性标签?
【发布时间】:2020-04-28 15:46:59
【问题描述】:

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

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

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

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

场景: 当用户选择了 Button 并向右滑动时,表格视图中的第一个单元格被选中。

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

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

是否可以让VO先读取collection view的accessibility label?

【问题讨论】:

    标签: ios uitableview uicollectionview accessibility voiceover


    【解决方案1】:

    UICollectionView 可以被视为一个容器,其中嵌入了许多元素(它的单元格),而且,您不能同时拥有一个父视图 (集合视图) 及其子视图(其单元格)both accessible 并带有旁白:可以选择集合视图或其单元格

    是否可以让VO先读取collection view的accessibility label?

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

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

    ⚠️ ⬛️◼️?▪️ 编辑 ▪️?◼️⬛️ ⚠️ (在 MarkS 的 cmets 之后)

    我正在想办法包装它,但到目前为止我一直没有成功。

    以后试试这个代码 sn-p 来创建你的无障碍元素:

    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 来达到您的目的:每个操作都对应一个特定的单元格...这绝对不完美,但尽可能接近得到你的要求。

    【讨论】:

    • 我正在尝试找出一种包装它的方法,但到目前为止我一直没有成功。文档中没有任何示例专门针对这种情况。我可以看到一些非常老套的方法,我只需将文本添加到第一个单元格中,每当 VO 突出显示该栏时就会读出该单元格,但不希望这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2021-11-02
    相关资源
    最近更新 更多