带有内部CollectionView的TableViewCell上的iOS可访问性

时间:2017-10-16 06:14:41

标签: ios uitableview accessibility uicollectionviewcell voiceover

我正致力于支持iOS应用的辅助功能(在Swift中)。我有UITableViewCell个内部CollectionView(每个单元格有内部ImageView),如下所示:

enter image description here

默认情况下,当我点击父视图(TableViewCell)时,它会读取2个标签,当我点击CollectionView单元格时,它会读取单元格中图像的名称。但是,某些标签和图像具有不同的可访问性值,因此我必须手动设置它们。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        if let tableViewCell = cell as? MyParentTableView {
            tableViewCell.isAccessibilityElement = true
            tableViewCell.accessibilityLabel = getCorrectAccessibilityLabel()
        }
    }

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    // sample only
    if let myCell = cell as? MyCollectionViewCell {
        myCell.isAccessibilityElement = true
        myCell.accessibilityValue = getCorrectAccessibilityLabel()
    }
} 

当我这样做时,父视图会阻止整个视图,因此我无法再将可访问性框放在CollectionView单元格上,而VoiceOver也不会再将它们读出来。我尝试先设置TableView的可访问性,然后设置每个CollectionView单元的可访问性,并在TableView中使用accessibilityElements,但它似乎不起作用。

// TableViewCell's awakeFromNib function    
override func awakeFromNib() {
    super.awakeFromNib()

    self.collectionView.dataSource = self
    self.collectionView.delegate = self

    self.accessibilityElements = [self, self.collectionView]
}
编辑:发布一些代码。

感谢任何帮助或见解。谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解问题是你无法点击该集合,因为该应用程序始终认为您点击了该行,对吧? 您是否尝试禁用行的选择并在集合下放置一个不可见的视图,该视图具有相同的行宽和高度以及touchRecognition?如果你点击视图就像你点击了这一行,但我认为这可以解决你的问题。

另一个提示:不要将委托的设置放在awakeFromNib方法中,因为有时候不会调用此方法。这取决于创建的对象。将它始终放在viewDidLoad()中。