我正致力于支持iOS应用的辅助功能(在Swift中)。我有UITableViewCell
个内部CollectionView
(每个单元格有内部ImageView),如下所示:
默认情况下,当我点击父视图(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]
}
编辑:发布一些代码。
感谢任何帮助或见解。谢谢!
答案 0 :(得分:0)
如果我理解问题是你无法点击该集合,因为该应用程序始终认为您点击了该行,对吧? 您是否尝试禁用行的选择并在集合下放置一个不可见的视图,该视图具有相同的行宽和高度以及touchRecognition?如果你点击视图就像你点击了这一行,但我认为这可以解决你的问题。
另一个提示:不要将委托的设置放在awakeFromNib方法中,因为有时候不会调用此方法。这取决于创建的对象。将它始终放在viewDidLoad()中。