在集合视图中删除项目的正确方法

时间:2015-08-04 11:13:57

标签: ios arrays uicollectionview uicollectionviewcell

我有一个存储在图片数组中的20个项目的集合视图。我正在使用以下代码删除所选项目:

func deleteItemsAtIndexPaths(indexPaths:[NSIndexPath]){
        for indexPath in indexPaths{
            pictures.removeAtIndex(indexPath.item)
        }
    }

这是picturesObject的deleteItemsAtIndexPaths:

的实现
  func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        collectionView.allowsMultipleSelection = true

        return 1
    }

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return picturesObject.pictures.count
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! ShopCell
        cell.imageView.image = picturesObject.pictures[indexPath.item]

        return cell
    }

我面临的问题如下。每次删除集合视图中的选定项目时,图片数组都会变小。如果我删除第一项,那么图片数组只有19项大项。如果我尝试在集合视图中删除项目编号20,则数组索引超出范围,因为图片数组现在只有19个对象大,但我想删除存储在indexpath.item中的最20个对象。

在集合视图中删除项目的正确方法是什么?

编辑:///集合视图方法

foreach (CubeWrapper wrapper in mWrappers) {   
    var name = "w" + (i+1).ToString();
    var value = this.GetType().GetProperty(name).GetValue(this);
    wrapper.setWord(value);
}

1 个答案:

答案 0 :(得分:3)

deleteItemsAtIndexPaths中循环播放数组之前,请按降序对indexPaths进行排序。然后,如果删除项目编号19,则删除的下一个保证小于19。