目前,我有一个包含UICollectionView的容器视图,该视图具有许多启用了可访问性的单元格。
[使用VoiceOver时,我可以循环浏览应用程序中的所有元素,当我进入容器视图时,它将循环浏览所有单元格及其标签(我没有启用任何可访问性方法或属性容器视图)。
但是,我希望为它分配一个可访问性标签给UICollectionView,以便VO在读取第一个单元格的可访问性标签之前先读取UICollectionView的可访问性标签FIRST。
即紧靠CollectionView标签上方的按钮:“按钮”CollectionView的标签:“过滤器栏”单元格1(默认选中)的标签:“运动”单元格2的标签:“雪佛兰”
场景:当用户选择“按钮”并向右滑动时,将选择表视图中的第一个单元格。
预期结果:VO的内容为:“筛选器栏,已选择,运动,按钮”
实际结果:VO的内容为:“已选择,运动,按钮”。
是否可以使VO首先读取集合视图的可访问性标签?
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来达到目的:每个动作都将对应于一个特定的单元格……这绝对不是完美的,但是却尽其所能根据您的要求。