UICollectionView组部分?

时间:2016-10-07 16:27:05

标签: swift uicollectionview

请原谅我,如果它太基本,但我可能会错过这里。

我有一个集合,其中每个部分都有一个或多个元素。 会发生的是,我将整个列表视为一个列表,而不区分各个部分。

我想得到的效果是自然的,如果一个部分有3个元素,我只看到第一个,如果我推它,我可以看到该部分内的其他元素,再次按下关闭。

我需要手动做吗?它不是现在用于部分的方式。

(这个形式的部分是什么?只是为了得到标题?我可以自己做)

2 个答案:

答案 0 :(得分:1)

没有内置方法可以按照您描述的方式扩展/折叠部分,但如果您真的想要,则可以完全执行此操作。只需将该部分的大小设置为足够大,以便默认显示一个单元格,如果有人点击该部分设置,则该部分的大小足以显示其余部分。您最终必须维护一系列扩展部分,以便每次重新加载时都知道哪些部分显示一个单元格以及哪些部分显示所有部分。

这是一种痛苦,但我之前被要求在工作中做到这一点,并且它运作得很好。做这种事情会产生一些不可避免的后果,但如果你真的需要,你可以通过它们来解决这些问题。

答案 1 :(得分:0)

我找到了一种非常简单的方法。

我不会立即使用部分。我所做的是设置1个部分和多个行,然后每一行只显示数据数组中的第一个元素(假设数据数组的每个元素都是一个数组)。在选择时,我重新加载表格。

当用户选择一行时,我会检查它是否有多个值:

  func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        var inSection=[String]()
        inSection=data[indexPath.row]
    if ( inSection.count>1)
    {
        //MULTIPLE VALUES IN CELL
           OpenGroup=indexPath.row
           collectionView.reloadData()


    }

另外,当我加载时,我设置这样的代理:

  func numberOfSections(in collectionView: UICollectionView) -> Int {
        if(OpenGroup > -1 ){ return data.count} //case open group

           return 1   //case closed group

    }


    internal func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        if(OpenGroup > -1 ) {return data[section].count}
        return data.count
    }

在这种情况下,当我在所选单元格上有多个值时,我只更新一个变量,说明哪个部分是打开的,然后重新加载该集合。

正如您在委托中看到的,如果有一个打开的单元格,它会将集合设置为多个部分,否则,1个部分和多个行。

它完美无缺,只需要很少的代码。

数据,保持原样 - 使用分组 - 因此当用户重新加载表格时,他会获得原始数据数组。