如何在Swift中的CollectionView中实现显示/隐藏部分

时间:2019-01-08 18:49:27

标签: ios swift uicollectionview cell

我正在整个互联网上搜索,我不确定是否可以完成,因为我是iOS开发的新手。我想当我的应用开始只显示标题的第一部分和单元格时。然后,当我单击一个单元格时,我想从标题和单元格等的第2部分下面显示给我,我已经正确设置了单元格和部分,也可以选择每个单元格并正确更改背景颜色等。我的应用程序运行了,但它同时显示了所有部分和单元格。

例如:

应用启动,我只能看到第1部分:

第1部分标题

单元1 单元2 单元3

然后我单击单元格1,我必须只看到第1部分和第2部分:

第1部分标题

单元1 单元2 单元3

第2部分标题

cell1 cell2 cell3 cell4

然后单击单元格4,我必须仅看到第1部分,第2部分和第3部分:

第1部分标题

单元1 单元2 单元3

第2部分标题

cell1 cell2 cell3 cell4

第3部分标题

单元格 单元格

我发现我必须使用下面提到的这些方法,但是我不知道如何在我的收藏夹中实现显示/隐藏部分。

这是我的代码:

dc_eximconfig_configtype='internet'
…
dc_local_interfaces='127.0.0.1 ; ::1'

1 个答案:

答案 0 :(得分:0)

如果要对数据进行建模,这将很有帮助,以便您可以跟踪应隐藏的部分(以及单元格背景色)。也许您已经是,但我仅举一个例子:

class MyModelSection {
    var items = [MyModel]()
    var hidden = true
}

class MyModel {
    var backgroundColor: UIColor?
}

class MyViewController: UICollectionViewController: {
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    var dataSource = [MyModelSection]()
    var visibleDataSource: [MyModelSection] {
        return dataSource.filter { !$0.hidden }
    }

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 }

然后,您可以使用UICollectionViewDataSource协议来确定应显示的部分

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return visibleDataSource.count
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return visibleDataSource[section].items.count
}

在列出的功能中,我想您会使用:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    // Not sure how your logic for picking which one gets displayed...
    guard visibleDataSource.count >= indexPath.section else {
        return
    }

    let dataForNextSection = visibleDataSource[indexPath.section + 1]
    dataForNextSection.hidden = false
    collectionView.reloadData()
}