我有一个UITableView
,其中有2个部分,每个部分包含一个单元格。这些单元格包含UICollectionView
个。这些集合视图具有不同的类型。尝试遵循MVC设计模式,我将ViewController
作为数据源以及UITableView
和UICollectionView
的委托。
以下是我的表格视图的数据源代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: recomendationCellId, for: indexPath) as! RecomendationsTableViewCell
cell.collectionView.dataSource = self
cell.collectionView.delegate = self
return cell
} else if indexPath.section == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: collectionCellId, for: indexPath) as! CollectionsTableViewCell
cell.collectionView.dataSource = self
cell.collectionView.delegate = self
return cell
} else {
return UITableViewCell()
}
}
现在,我需要使用collectionView(_:,cellForItem:)
方法将集合视图的单元格出列。在其中我需要检查表视图的部分以使正确的单元格出列。
问题在于我知道它应该有一个简单的解决方案,但无法弄明白。您有什么建议可以实现吗?
答案 0 :(得分:0)
如果集合视图在单元格内部,则仅在cell
处理...所以当您设置cell.collectionView.dataSource = self
时,这意味着您将delegate
设置为当前视图控制器而不是单元格,表示集合视图在当前视图控制器中查找数据源。
当您使用MVC时,最好在cell
内实现数据源和委托方法。
因此,您需要最终设置cell.collectionView.dataSource = cell
,因为cell
将实现数据源和委托方法。
答案 1 :(得分:0)
即使您从单元格本身确认集合视图委托和数据源方法,您的MVC模式也不会中断! 模型负责为您提供数据,而不是控制器。 1.拥有一个用于显示集合视图单元格数据的模型 2.从你的tableview单元本身确认它们!
extension yourTableViewCell: UICollectionViewDelegate {
// Respective methods
}
extension yourTableViewCell: UICollectionViewDataSource {
// Respective methods
}