ios 具有辅助功能的UITableViewCell中的UICollectionView

ndh0cuux  于 2023-05-08  发布在  iOS
关注(0)|答案(3)|浏览(138)

我正在向我的iOS应用添加Accessibility支持,但我的一个表格视图单元格中的集合视图遇到了问题。
例如,当用户从第一个单元格(水平)滚动到第二个单元格时,Accessibility仍然读取第一个单元格的内容。如果我尝试点击第二个单元格中的视图,它会突出显示第二个单元格左侧的空白区域(第一个单元格将在此处,但不再可见),并读取第一个单元格的内容。
当集合视图 * 不在 * 表视图单元格中时(即UIView的子视图),则不会发生这种情况。
我怀疑这与调用UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification)有关,我尝试在许多不同的地方调用它,但没有任何效果。
下面的两个屏幕截图显示了UIView中的集合视图。辅助功能已启用,因此在点击时会以黑色边框选中。
1.当用户点击第一个单元格时,它将被选中。

1.当用户点击“下一个”,转到第二个小区,并点击该小区时,新小区将被选择。

接下来的两个屏幕截图显示了表视图单元格中的集合视图。
当用户点击第一个单元格时,它会被选中,并且VoiceOver会正确读取“我是标签0”。

然而,当用户点击“下一个”,转到下一个单元格,并点击第二个单元格时,它不会被选择,并且VoiceOver仍将读取“我是标签0”。

代码为here on github

fslejnso

fslejnso1#

我也遇到过类似的问题,但最终还是解决了。我认为你和你的妻子

isAccessibilityElement = true

而不是彼此
我有一个垂直滚动的表格视图,每个单元格包含一个水平滚动的标题和集合视图。
我只在标题和集合视图单元格上将isAccessibilityElement设置为true,在其他单元格上设置为false
然后,我子类化了UICollectionView并覆盖了以下NSObject方法:

func accessibilityElementCount() ->  Int
func accessibilityElement(at: Int) -> Any?
func index(ofAccessibilityElement element: Any) -> Int

它基本上只是告诉画外音你的集合视图有这些可访问的元素。集合视图本身是不可访问的,这不是问题,相反。你可能需要

open var accessibilityElements: [Any]?

而不是
下面是一些来自文档(UIAccessibility.h)的更多阅读:
UIAccessibilityContainer方法可以被覆盖,以出售由单个UIView管理的单个元素。
例如,单个UIView可能会绘制几个(对最终用户而言)具有单独意义和功能的项目。将每个项目作为单独的辅助功能元素出售是很重要的。
容器中没有具体UIView示例表示的子元素(可能是绘制的文本或图标)可以使用UIAccessibilityElement类的示例表示(请参见UIAccessibilityElement.h)。
可访问性容器必须将NO返回到-isAccessibilityElement。
要让漂亮的3指语音超过滚动你可能要覆盖

func accessibilityScroll(_ direction: UIAccessibilityScrollDirection) -> Bool

并相应地滚动收藏视图。

ctrmrzij

ctrmrzij2#

你可能想试试这个:

let nextCell = collectionView.cellForItemAtIndexPath(nextIndexPath)
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,
                                argument: nextCell)

onNextButtonTapped方法中,在调用scrollToItemAtIndexPath之后。
这将在下一个集合视图单元格上聚焦Accessibility。

owfi6suc

owfi6suc3#

我发现没有必要子类化UICollectionView。相反,在容器视图(UITableViewCell)中定义可访问性元素,如下所示:

accessibilityElements = [titleLabel, collectionView]

现在可以导航所有collectionView元素。

相关问题