Swift:具有动态和静态单元格的UICollectionView

时间:2015-02-18 22:59:32

标签: ios swift uicollectionview uicollectionviewcell

我从数组中创建了一些collectionviewcells。我想要的是一个位于所有这些细胞末端的静态细胞。

所以无论我添加多少个细胞,这个特定的细胞都停留在最后

如果不可能做到这一点,你有什么想法来完成我正在尝试的事情

非常感谢你。我非常感谢你提供的任何答案

enter image description here

2 个答案:

答案 0 :(得分:4)

是的,这绝对是可能的。

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int中,您应该总是返回比您拥有的物品数量多1的物品。

func collectionView(_ collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell中,您应该检查indexPath.row是否等于您拥有的项目数。如果是,请将该特定单元配置为具有+号。

下面的常见错误

请确保对于最后一个单元格,您不会调用访问用于标记的相同数组。

例如,如果您的标记数组如下所示:

var myItems = ["Tag1", "Tag2", "Tag3"]

然后以下代码错误

var titleToDisplayOnCell = myItems[indexPath.row] // Don't do this!

这是因为对于应该显示+符号的单元格,行为3且myItems [3]中没有对象 - 超出数组的边界,即0到2(包括0和2)

答案 1 :(得分:2)

是的,这绝对是可能的。我首选的方法是在集合视图中使用两个单独的部分:

func numberOfSections() -> Int { 
    return 2
}


func numberOfItemsInSection(_ section: Int) -> Int {
    if section == 0 {
        return array.count
    } else if section == 1 { 
        return 1
    } else {
        return 0
    }
}


func cellForItemAtIndexPath(_ indexPath: NSIndexPath) -> UICollectionViewCell? {
    if indexPath.section == 0 {
      // set up the standard cell, using the data from the army
    } else if indexPath.section == 1 {
      //set up the "+" cell
    }
}

实现同一目标的另一种方法是只使用一个部分,将集合视图的大小声明为数组的大小+ 1,并在cellForItemAtIndexPath方法的if语句中设置额外的单元格,但你会发现它会导致额外的数学运算带来更多的复杂性。如果可能的话,通常在不同的部分使用不同的数据保持单元格更安全