UICollectionView拖放删除半透明单元格

时间:2019-01-10 07:48:59

标签: ios objective-c uicollectionview drag-and-drop

我正在使用iOS 11拖放API进行重新排序,并想删除开始拖动时出现的半透明单元格。可能吗?对于拖动,我仅使用UICollectionViewDragDelegate的必需方法:

- (nonnull NSArray<UIDragItem *> *)collectionView:(nonnull UICollectionView *)collectionView
                     itemsForBeginningDragSession:(nonnull id<UIDragSession>)session
                                      atIndexPath:(nonnull NSIndexPath *)indexPath {
    NSItemProvider *itemProvider = [NSItemProvider new];
    UIDragItem *dragItem = [[UIDragItem alloc] initWithItemProvider:itemProvider];

    return @[dragItem];
}

enter image description here

3 个答案:

答案 0 :(得分:2)

您可以通过覆盖dragStateDidChange(_ dragState: UICollectionViewCell.DragState)

在拖放生命周期中自定义单元格
class MyCell: UICollectionViewCell {

    //...
    override func dragStateDidChange(_ dragState: UICollectionViewCell.DragState) {

        switch dragState {
        case .none:
            self.layer.opacity = 1
        case .lifting:
            return
        case .dragging:
            self.layer.opacity = 0

        }
    }
}

答案 1 :(得分:0)

您可以在预览提供程序中返回nil

dragItem.previewProvider = ^UIDragPreview * _Nullable {
    return nil;
};

快速版本

dragItem.previewProvider = {
    return nil
}

答案 2 :(得分:0)

在您的单元格类中覆盖此方法:

override func dragStateDidChange(_ dragState: UICollectionViewCell.DragState) {

    switch dragState {
    case .none:

        self.layer.opacity = 1

    case .lifting:

        return

    case .dragging:

        self.layer.opacity = 0
    }
}