当我将其添加到UICollectionViewController子类中时,重新排序在iOS9中有效

override func collectionView(collectionView: UICollectionView,
        moveItemAtIndexPath sourceIndexPath: NSIndexPath,
           toIndexPath destinationIndexPath: NSIndexPath)

当此UICollectionViewController子类嵌入到容器 View 中时,它将不起作用。

我已经对问题here进行了演示

关于为什么或如何解决它的任何想法?

最佳答案

这里的问题是,您将UICollectionView放在驻留在UIViewController内的UIContainerView内。这仅需要几个步骤即可使UICollectionView正常工作。

将以下内容添加到CollectionViewController中的ViewDidLoad中:

    self.collectionView!.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: "handleLongGesture:"))

然后将以下函数添加到您的CollectionViewController中:
    func handleLongGesture(gesture: UILongPressGestureRecognizer)
    {

    switch(gesture.state)
    {

    case UIGestureRecognizerState.Began:
        guard let selectedIndexPath = self.collectionView!.indexPathForItemAtPoint(gesture.locationInView(self.collectionView)) else
        {
            break
        }
        collectionView!.beginInteractiveMovementForItemAtIndexPath(selectedIndexPath)
    case UIGestureRecognizerState.Changed:
        collectionView!.updateInteractiveMovementTargetPosition(gesture.locationInView(gesture.view!))
    case UIGestureRecognizerState.Ended:
        collectionView!.endInteractiveMovement()
    default:
        collectionView!.cancelInteractiveMovement()
    }
}

最后,只需确保包括以下内容,以确保正确处理dataSource:
    override func collectionView(collectionView: UICollectionView, moveItemAtIndexPath sourceIndexPath: NSIndexPath,toIndexPath destinationIndexPath: NSIndexPath) {
    // Swap the values of the source and destination
}

查看此link以获得更多有关此的信息。

希望这对您有所帮助。

09-25 18:45