我想在运行时设置collectionView的numberOfItemsInSection。我会经常在运行时以编程方式更改值,并且想知道如何。
我有一个要在我的UICollectionView中显示的图像数组(每个UICollectionViewCell有1个图像),用户可以更改要显示的图像的类别,这也将改变要显示的图像数量。加载视图时,numberOfItemsInSection设置为allClothingStickers数组的计数。但这个数字太高了。确实显示的数组是clothesStickersToDisplay数组,它是allClothingStickers数组的一个子集。
滚动后出现此错误:
致命错误:数组索引超出范围
这是因为项目数量变小了,但UICollectionView numberOfItemsInSection
属性没有变为较小的数字。
我有这个函数在运行时设置UICollectionView中的单元格数。
func collectionView(collectionView: UICollectionView,
numberOfItemsInSection section: Int) -> Int {
return self.numberOfItems
}
此函数用于设置stickersToDisplay数组(我想在此处更新numberOfItemsInSection属性):
func setStickersToDisplay(category: String) {
clothingStickersToDisplay.removeAll()
for item in self.allClothingStickers {
let itemCategory = item.object["category"] as! String
if itemCategory == category {
clothingStickersToDisplay.append(item)
}
}
self.numberOfItems = clothingStickersToDisplay.count
}
这是返回要显示的单元格的函数:
func collectionView(collectionView: UICollectionView,
cellForItemAtIndexPath indexPath: NSIndexPath)
-> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(
identifier,forIndexPath:indexPath) as! CustomCell
let sticker = clothingStickersToDisplay[indexPath.row]
let name = sticker.object["category"] as! String
var imageView: MMImageView =
createIconImageView(sticker.image, name: name)
cell.setImageV(imageView)
return cell
}
编辑:哦,是的,我需要使用新的UICollectionView
重新加载clothingStickersToDisplay
我更新它的numberOfItemsInSection
答案 0 :(得分:1)
我认为你应该做的是clothingStickersToDisplay
一个全局数组声明。
而不是使用self.numberOfItems = clothingStickersToDisplay.count
将此功能更改为
func setStickersToDisplay(category: String) {
clothingStickersToDisplay.removeAll()
for item in self.allClothingStickers {
let itemCategory = item.object["category"] as! String
if itemCategory == category {
clothingStickersToDisplay.append(item) //<---- this is good you have the data into the data Structure
// ----> just reload the collectionView
}
}
}
在numberOfItemsInSection()
中return self.clothingStickersToDisplay.count