我正在开发一个项目,在UITableView内部的UITableViewCell内部有一个UICollectionView。我使用XIB作为我的UICollectionViewCell,它包含一个ImageView,另一个XIB用于我的UITableViewCell,它包含一个UICollectionView。我已设法显示所需的东西,但是,我的自定义集合视图单元格没有响应任何触摸事件。经过一番研究,我试过了:
在UITableViewCell中设置UICollectionView的委托,我的自定义UITableViewCell类实现UICollectionViewDelegate和UICollectionViewDataSource
collectionView.delegate = self
collectionView.dataSource = self
使用UICollectionView的委托方法
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// my implementation here
}
为cellForItemItemAt中的每个单元格添加自定义UITapGestureRecognizer
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(MyCustomTableViewCell.cellTapped))
tapRecognizer.numberOfTapsRequired = 1
cell.addGestureRecognizer(tapRecognizer)
使用UITableViewCell,UICollectionView和UICollectionViewCell的自定义实现,覆盖hitTest函数
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if let hitView = super.hitTest(point, with: event) {
if hitView is MyCustomCollectionViewCell {
print("hitTest - MyCustomCollectionViewCell")
return hitView
} else {
return nil
}
} else {
return nil
}
}
以下是我的自定义TableViewCell XIB的屏幕截图:
感谢任何帮助。谢谢!
答案 0 :(得分:1)
可能你说错了。 应为tableView,tableViewCell,collectionView,collectionViewCell启用用户交互。如果您将其转换为tableView - 那么其中的所有内容都不会是交互式的。 在这里查看我的示例项目: https://github.com/1mperial8e/CollectionViewExample
我重新创建了相同的情况 - 在viewViewCell中的单元格中使用imageView的collectionView。没有什么额外的,只是简单的意见。您可以比较设置并查找代码或故事板设置中的问题所在。
您不需要任何敲击手势。 collectionView:didSelectItemAtIndexPath:完美无缺。
答案 1 :(得分:1)
事实证明,TableViewCells现在有contentViews阻止我内部的所有触摸。所以,我只是在我的UITableViewDelegate中使用它 -
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
....
cell.contentView.isUserInteractionEnabled = false
....
}
供参考:can't click UIButton inside a cell in UITableview
向Stas Volskiy致敬,非常乐于助人