// MARK: - UITableViewDragDelegate
func tableView(
_ tableView: UITableView,
itemsForBeginning session: UIDragSession,
at indexPath: IndexPath
) -> [UIDragItem] {
// ここで特定のcellのdragを無効化できる(ここでは3番目が無効化)
if indexPath.row == 2 {
return []
}
let item = self.data[indexPath.row]
let itemProvider = NSItemProvider(object: item as NSString)
let dragItem = UIDragItem(itemProvider: itemProvider)
return [dragItem]
}
// MARK: - UITableViewDropDelegate
func tableView(_ tableView: UITableView, dropSessionDidUpdate session: UIDropSession, withDestinationIndexPath destinationIndexPath: IndexPath?) -> UITableViewDropProposal {
guard let destinationIndexPath = destinationIndexPath else {
return UITableViewDropProposal(operation: .cancel)
}
// ここで無効なセルへのドロップ禁止できる(ここでは3番目へのドロップを無効化)
if destinationIndexPath.row == 2 {
return UITableViewDropProposal(operation: .forbidden)
}
return UITableViewDropProposal(operation: .move)
}