我想在运行时设置collectionView的numberOfItemsInSection。我将经常在运行时以编程方式更改该值,并且想知道如何操作。
我有一个图像数组要显示在我的UICollectionView中(每个UICollectionViewCell 1个图像),并且用户可以更改要显示的图像的类别,这也将更改要显示的图像的数量。视图加载时,将numberOfItemsInSection设置为allClothingStickers数组的计数。但是这个数字太高了。确实显示的数组是clothingStickersToDisplay数组,它是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
。 最佳答案
我认为您应该做的是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