首页 > 解决方案 > iOS 拖放。如何在拖动时用自定义视图替换单元格

问题描述

是否可以将一个元素从可拖动的 UITableViewCell 完全替换为自定义 UIView?

比如我拖了一个单元格,我想在点击单元格的时候显示一个圆圈,在拖拽的过程中,但是直到松开,在元素上显示该元素是否可以降到底位置。

我使用了 UITableViewDragDelegate 和 UIDropInteraction,但找不到单元格替换,只能使用 UIBezierPath 从单元格中获取部分以剪切部分单元格。

标签: iosobjective-cswiftuitableviewdrag-and-drop

解决方案


您可以通过实现此委托方法来实现

func tableView(_ tableView: UITableView,
   itemsForBeginning session: UIDragSession,
   at indexPath: IndexPath) -> [UIDragItem] {
       let provider = NSItemProvider()
           let item = UIDragItem(itemProvider: provider)
           
           // remove this code to drag whole cell
           ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
           item.previewProvider  = { () -> UIDragPreview? in
              let previewImageView = UIView()
              previewImageView.frame =  CGRect(x: 0,y: 0,width: 50,height: 50)
             previewImageView.layer.cornerRadius = previewImageView.bounds.maxX / 2
              return UIDragPreview(view: previewImageView)
           }
           /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          
              
              
           return [item]
   }

你会得到这个效果

在此处输入图像描述


推荐阅读