我有一个UITableView,其中包含类别列表(在此示例中,是体育类型的列表,即基于水和土地的列表)
然后,此表中的每个单元格都有与嵌套UICollectionView中显示的运动类型相关的运动列表。例如,水基冲浪和游泳都可以。
考虑Netflix-具有垂直滚动类别和水平滚动子类别。
这是示例JSON(请注意,显示的JSON仅用于描述结构。实际上我已将其存储在RealmDb中)
{
"category": [
{
"title": "Sport Listings",
"category_content": [
{
"title": "Water Based",
"category_content": [
{
"title": "Surfing"
}, {
"title": "Swimming"
}, {
"title": "Snorkelling"
}, {
"title": "Tombstoning"
}
]
},
{
"title": "Land Based",
"category_content": [
{
"title": "Football"
}, {
"title": "Rugby"
}
]
}
]
}
]
}
我在表格中正确地填充了两个单元格(“基于水的”和“基于土地的”),但是现在我很难理解如何将计数和数据解析到每个表格行的集合视图中,这样我就可以设置每个集合视图委托的文本。
如果我只是将每个表行的收集视图计数设置为随机值,然后获取每个单元格文本以显示行索引,则它显示的是正确的索引。我这样做是为了消除任何布局问题。
有人有指针吗?从我已经看到的示例中,嵌套的UICollectionView计数是硬编码的,而不是动态的,与委托内容(相同的图像/文本)相同
我还没有发布任何代码,因为它已经变得一团糟,而我试图找出来。如果需要,我可以将其剥离并放在此处。
答案 0 :(得分:0)
在我看来,仅当您想利用其主要功能时才应使用tableview:回收以支持大量单元格以及其他功能(例如搜索,字母顺序等)。我宁愿使用vertical自己查看堆栈视图并管理您的收藏夹视图,而不是将它们放在单元格中。我可以想象在滚动时回收您的集合视图将是一场噩梦-因为将重复使用同一单元实例-但是现在当您向下滚动时,它将具有错误的集合视图。
如果此表视图中的行数少于10,我将使用“垂直方向”的Stackview。您不需要细胞或回收。以前,我在垂直布局中使用表格视图时,会遇到状态清理和回收单元中元素渗漏的问题。
我可能会将每个集合视图的委托分解为一个单独的类。
要回答您的主要问题: 如果您仍要使用表视图,则将复用标识符设置为每一行的唯一值,这样就不会发生回收。并管理数据源对象数组,以将其分配给tableView方法的cellForRow中的每个集合视图。
另一种选择是让每个单元格成为每个集合视图的数据源-通过创建自定义UITableViewCell子类作为您的集合视图的数据源和UI容器,使其完全独立。然后在cellForRow方法中将通用数据模型注入到该单元中(这适用于所有类型的集合视图-不管数据类型如何)。
尽管如此,我还是将数据源保留为单独的对象,并将其注入到单元格中,因为对我而言,一个单元格应该只是一个“外壳”(UI布局元素),并且不应保存dataSource的详细信息(数据源也可以在其他地方重复使用的方式,而不仅仅是该单元格