一个UIViewController中的多个UICollectionView数据源

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个UIViewController中的多个UICollectionView数据源相关的知识,希望对你有一定的参考价值。

我对实施有疑问。

我的用户将能够从下拉列表中选择他们想要在集合视图中看到的内容。根据选择,数据集和可能的部分/单元格类型将发生变化。

我应该有一个UICollectionView注册所有单元格,并根据用户选择修改我的cellForItemAt

或者我应该选择UICollectionView然后根据选择交换它们?

什么是最好,更专业的实施?

答案

如果显示的单元格本质上相似(它们具有相同的数据结构,即图片,文本,描述,名称等),那么您应该使用一个可重复使用的单元格。

拥有一个单元格可以使您的代码更清晰。然后,您还可以在单​​元格内设置可使用数据设置的可观察属性。将数据传递给单元格,然后在单元格类中,它将负责布局代码。

let cell = someDequeuedCell
cell.data = somedata
return cell

然后在细胞类里面,

var data: SomeData? {
    didSet {
        //Determine data and layout cell
        if data == 'apple' {
           //Layout apple cell
        } else if data == 'orange' {
           //Layout orange cell
        } else {
           //Layout other cell
        }
    }
}

这种方法非常常用,但是如果每个单元的变化不仅仅是改变的数据。您应该为每种数据类型注册多个不同的单元格。

在collectionView里面

if dataType == "apple" {
    let cell = appleCell
    cell.data = someData
    return cell
} else if dataType == "orange" {
    let cell = orangeCell
    cell.data = someData
    return cell
} else {
    let cell = otherCell
    cell.data = someData
    return cell
}

以上是关于一个UIViewController中的多个UICollectionView数据源的主要内容,如果未能解决你的问题,请参考以下文章

从 uic 输出到 Qt 中的 C++ 代码

QT中的moc,uic,rcc规则各是啥规则,求详细解释~

一个UIViewController中的多个UICollectionView数据源

单个 UIViewController 中的多个集合视图未调用 cellForItemAtIndexPath indexPath

具有多个类的Storyboard UIViewController

如何在多个 UIViewController 之间共享一个故事板场景