一段时间以来,我已经成功地将集合视图嵌套到tableview中。
我仍然不知道该怎么做,是在尊重MVC模式的同时做到这一点?
现在,我声明我的tableview及其单元格,并在该单元格(collectionView所在的单元格)中,附加我的collectionView(每个单元格有1个)并进行数据映射。它可以工作,但是它是意大利面条式代码,我的View就像控制器一样。
我尝试了几次以尊重MVC模式。我可以让我的控制器控制我的表视图和集合。我需要努力的是告诉我的集合视图委托,它应该选择哪些数据,因为我所引用的全部是(集合视图的)indexPath,而不是特定集合视图位于哪个表视图中。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell
return cell
}
委托仅给我单元格的indexPath,而不是它的collectionView。使用一个具体的例子-假设我的表视图单元格代表消息,并且每个消息都有一个控制反应的collectionView(例如Discord)。如何告诉我的collectionView委托链接到哪个消息?
非常感谢您的帮助!
答案 0 :(得分:0)
这很简单。每个视图及其子类都有一个属性tag
。您必须拥有IBOutlet
中的CollectionView
或对TableViewCell
的简单引用。当您将TableViewCell
出队时,只需将CollectionView
的标签设置为等于indexPath.row
的{{1}}的标签,如下所示:
tableViewCell
然后在tableViewCell.collectionView.tag = indexPath.row
或UICollectionViewDataSource
方法中,您可能会发现它是哪个collectionView,换句话说,这个collectionView所在的是tableViewCell。这是一个示例:
UICollectionViewDelegate
P.S::没有必要在这种程度上尊重MVC。您可以从TableViewCell管理您的CollectionView。看看这个example。