是否可以在使用UICollectionViewFlowLayout的UICollectionView中交换2个单元格?

时间:2012-12-14 21:37:31

标签: objective-c uicollectionview

假设我有一个使用UICollectionViewFlowLayout的UICollectionView,格式如下:

1 2 3
4 5 6
7 8 9

我触摸单元格9并将其拖到单元格6上,将单元格9移动到单元格6所在的位置,将单元格6移动到单元格9所在的位置:

1 2 3
4 5 9
7 8 6

有没有办法轻松移动单元格6并将其设置为单元格9的位置,以及将单元格9移动到单元格6所在的位置?或者我是否必须继承UICollectionViewLayout?如果我必须继承UICollectionViewLayout,那怎么办呢?我已经尝试在

中明确设置单元格的中心

-(UICollectionViewLayoutAttributes*)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath

但没有成功。

3 个答案:

答案 0 :(得分:22)

经过多次敲击后,我找到的解决方案是在moveItemAtIndexPath:toIndexPath内使用performBatchUpdates:completion。根据{{​​1}}的{​​{3}}:

  

如果要在一个动画操作中插入,删除,重新加载或移动集合视图周围的单元格,而不是在几个单独的动画中,则可以使用此方法。使用updates参数中传递的阻止来指定您要执行的所有操作。

所以,我基本上做的是

performBatchUpdates:completion

答案 1 :(得分:0)

您是否尝试使用moveItemAtIndexPath直接重新排序项目:toIndexPath :?

- 确保您实际上重新订购了基础模型集合,以便在下次完全重新加载时更改。

答案 2 :(得分:0)

Swift代码:

        self.collectionView.performBatchUpdates({
            self.collectionView.moveItem(at: selectedIndexPath, to: targetIndexPath)
            self.collectionView.moveItem(at: targetIndexPath, to: selectedIndexPath)
        }, completion: nil)