【问题标题】:Set UICollectionView embedded in UITableViewCell设置嵌入在 UITableViewCell 中的 UICollectionView
【发布时间】:2019-07-13 04:35:25
【问题描述】:

我有一个 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"
                    }
                ]
            }
        ]
    }
]
}

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

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

有没有人指点?从我已经看到的示例中,嵌套的 UICollectionView 计数是硬编码的,而不是动态的,与委托内容相同(相同的图像/文本)

我没有发布任何代码,因为在我试图弄清楚它时它已经变得一团糟。如果需要,我可以将其剥离并放在这里。

【问题讨论】:

    标签: ios uitableview uicollectionview swift4 realm-database


    【解决方案1】:

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

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

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

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

    另一种选择是让每个单元格成为每个集合视图的数据源 - 因此它是完全自包含的,方法是创建一个自定义 UITableViewCell 子类,该子类既可用作集合视图的数据源,又可用作 UI 容器。然后在 cellForRow 方法中将通用数据模型注入该单元格(这将适用于所有类型的集合视图 - 无论数据类型如何)。

    不过,我会将数据源保留为单独的对象,并将它们注入到单元格中,因为对我来说,单元格应该只是一个“外壳”——一个 UI 布局元素,不应该包含数据源的详细信息(即数据源也可以在其他地方重复使用,而不仅仅是那个单元格)

    【讨论】:

    • 感谢您提供此信息。将使这成为公认的答案。实际上,我只是通过使用集合视图标签作为表格行来完成这项工作,这样我就可以从我的领域模型中获取正确的数据。我正在使用表格视图,因为表格和集合视图内容都是动态的。
    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多