numberOfItemsInSection

numberOfItemsInSection

我想在运行时设置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

10-08 12:18