从 UITableView 拖动项目并放入 UIView 子类

问题描述

我正在尝试在我的应用中实现拖放功能用户从表格视图中拖动一个项目并将其放入自定义视图中。

我的表视图实现了 UITableViewDragDelegate 中的 tableView(_ tableView: UITableView,itemsForBeginning session: UIDragSession,at indexPath: IndexPath),而我的自定义视图实现了 UIDropInteractionDelegate 中的必要功能。表视图的 dragInteractionEnabled 属性设置为 true,其拖动委托设置为 self。

从表格视图中拖动是可行的,但我无法将这些项目拖放到我的自定义视图中(根本没有调用 dropInteraction 函数)。但是,将随机文件(例如图像)放入自定义视图确实有效,并且会调用 dropInteraction 函数。我不确定这是否重要,但表视图位于视图控制器中,该视图控制器是控制自定义视图的视图控制器的子级。

这是我的 itemsForBeginning 表视图函数

func tableView(_ tableView: UITableView,at indexPath: IndexPath) -> [UIDragItem] {
    let dragItem = UIDragItem(itemProvider: NSItemProvider())
    dragItem.localObject = components[indexPath.item]
    return [dragItem]
}

这是我的自定义视图中用于接受放置的代码。这段代码并不完整,我只是想让它运行起来。

func dropInteraction(_ interaction: UIDropInteraction,performDrop session: UIDropSession) {
    for dragItem in session.items {
        print(dragItem.itemProvider)
    }
}
    
func dropInteraction(_ interaction: UIDropInteraction,sessionDidUpdate session: UIDropSession) -> UIDropProposal {
    return UIDropProposal(operation: .copy)
}
     
func dropInteraction(_ interaction: UIDropInteraction,canHandle session: UIDropSession) -> Bool {
    return true
}

任何帮助将不胜感激。此应用程序可在 iOS 14、iPadOS 14 和 MacCatalyst 上运行(目前在 macOS 10.15.7 上测试,因此 macCatalyst 13)。尽管 10.15.7 支持功能,但它适用于 iOS 和 iPadOS,但不适用于 macOS。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)