我从数组中创建了一些collectionviewcells。我想要的是一个位于所有这些细胞末端的静态细胞。
所以无论我添加多少个细胞,这个特定的细胞都停留在最后
如果不可能做到这一点,你有什么想法来完成我正在尝试的事情
非常感谢你。我非常感谢你提供的任何答案
答案 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语句中设置额外的单元格,但你会发现它会导致额外的数学运算带来更多的复杂性。如果可能的话,通常在不同的部分使用不同的数据保持单元格更安全