ios - iOS 拖放。如何在拖动时用自定义视图替换单元格
问题描述
是否可以将一个元素从可拖动的 UITableViewCell 完全替换为自定义 UIView?
比如我拖了一个单元格,我想在点击单元格的时候显示一个圆圈,在拖拽的过程中,但是直到松开,在元素上显示该元素是否可以降到底位置。
我使用了 UITableViewDragDelegate 和 UIDropInteraction,但找不到单元格替换,只能使用 UIBezierPath 从单元格中获取部分以剪切部分单元格。
解决方案
您可以通过实现此委托方法来实现
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]
}
你会得到这个效果
推荐阅读
- bash - 无法将差异输出拆分为数组
- java - 带有 Docker 的 Spring 应用程序在启动时因类路径错误而失败
- javascript - 有没有办法在角度应用程序中获取文档的高度?
- c# - 在 C# Form 应用程序中的用户控件之间传递数据
- java - 如何在 Fluent BPMN API 中创建关联流?
- python - 如何使 Python LightGBM 代码接受列表
- python - Pandas groupby 中的计数频率
- kubernetes - 为 Kubernetes 作业提供文件
- python - 将当前元素与列表中的任何元素进行比较
- sql - 将现有标题放在多行的一行上