设置嵌入在 UITableViewCell 中的 UICollectionView

Set UICollectionView embedded in UITableViewCell

我有一个包含类别列表的 UITableView(在此示例中,运动类型列表,即基于水上和陆上)

此 table 中的每个单元格都有一个与嵌套 UICollectionView 中显示的运动类型相关联的运动列表。比如water based会有Surfing和swimming。

想想 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"
                    }
                ]
            }
        ]
    }
]
}

我的 table 正确地填充了两个单元格("water Based" 和 "Land Based"),但我现在无法理解如何将计数和数据解析到每个 tables 行的集合视图,以便我可以为每个集合视图委托设置文本。

如果我只是将每个 table 行的集合视图计数设置为一个随机值,然后让每个单元格文本显示行索引,它会显示正确的索引。我这样做是为了消除任何布局问题。

有人指点一下吗?从我已经看到的例子来看,嵌套的 UICollectionView 计数是硬编码的,而不是动态的,与委托内容相同(相同 image/text)

我还没有发布任何代码,因为在我试图弄清楚它时它已经变得一团糟。如果需要我可以把它拆下来放在这里。

在我看来,只有当您想利用其主要功能时,才应使用 table 视图:回收以支持大量单元格,以及搜索、字母顺序器等其他功能. 我宁愿使用垂直堆栈视图并自己管理集合视图,也不愿将它们放在单元格中。我想在滚动时回收你的集合视图将是一场噩梦——因为同一个单元格实例会被重复使用——但现在它会在你向下滚动时有错误的集合视图。

如果您在此 table 视图中只有不到 10 行,我会使用垂直方向的 Stackview。你不需要细胞或回收。当我之前为垂直布局使用 table 视图时,我 运行 遇到了状态清理和回收单元格中元素渗出的问题。

我可能会将每个集合视图的委托分解为一个单独的 class。

回答你的主要问题: 如果您仍想使用 table 视图,请将 reuseIdentifier 设置为每一行的唯一值,这样就不会发生回收。并管理一组数据源对象,以分配给 tableView 方法的 cellForRow 中的每个集合视图。

另一种选择是让每个单元格成为每个集合视图的数据源 - 所以它是完全独立的,通过制作一个自定义 UITableViewCell subclass 作为数据源和 UI 集合视图的容器。然后在 cellForRow 方法中将通用数据模型注入该单元格(这适用于所有类型的集合视图 - 无论数据类型如何)。

我会将数据源作为单独的对象保存,并将它们注入到单元格中,因为对我来说,单元格应该只是一个 "shell" - 一个 UI 布局元素,而不应该保存数据源的详细信息(这样数据源也可以在其他地方重复使用,而不仅仅是那个单元格)