iOS
Swift

UICollectionViewで移動できないCellを作る

More than 1 year has passed since last update.

例えば0番目のcellを移動させたくない場合は

https://developer.apple.com/reference/uikit/uicollectionviewdatasource/1618015-collectionview

override func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool {
    return indexPath.row > 0
}

と書くと、0番目のcellを移動させることはできなくなります。
が、他のcellを0番目の前に持ってきては出来ます。
いやいやなんでやねん。

ここから追記。
他のcellが0番目のcellにこないように防ぐには、こんな感じにしておくといい感じになります。

override func collectionView(_ collectionView: UICollectionView,
                             targetIndexPathForMoveFromItemAt originalIndexPath: IndexPath,
                             toProposedIndexPath proposedIndexPath: IndexPath) -> IndexPath {
    if proposedIndexPath.row == 0 { return IndexPath(row: 1, section: 0) }
    return proposedIndexPath
}

コメントで正しい方法を教えていただきました!ありがとうございます!


↓間違ってたやり方

結局力技でこんな感じのを追加しました。

override func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
    if sourceIndexPath.row == 0 || destinationIndexPath.row == 0 {
        self.collectionView?.moveItem(at: destinationIndexPath, to: sourceIndexPath)
        return
    }
    // hogefuga
}

もっとスマートな解決法あったら教えて下さい。