我有一个简单的enum
作为两个UICollectionView
:的数据结构
enum ToolBarItem {
case inking(PKInkingTool.InkType, UIColor, CGFloat)
case lasso
case eraser(PKEraserTool.EraserType)
}
两种UICollectionView
模型都只是:
private(set) var tools = [ToolBarItem]()
我希望能够在两个UICollectionView
内和之间拖放项目,因此我需要以某种方式将其转换为dragItem。
我读过关于在类中嵌入enum
并实现NSItemProviderWriting
、NSItemProviderReading
和Codable
以创建项提供程序的内容。但这非常混乱,我希望有更好的解决方案,因为它只是一个enum
。
我很乐意接受任何帮助或建议。
由于还没有答案,我想为有同样问题的人分享我目前的解决方案:
我创建了一个名为dummyToolItem
的类,它符合NSItemProviderWriting
和NSItemProviderReading
。但是,这些实现是不起作用的,它们不需要起作用,因为它们永远不会被使用。
我现在这样创建我的UIDragItem
:
let toolData = toolBarItems.tools[indexPath.item] // this is the ToolBarItem
let dragItem = UIDragItem(itemProvider: NSItemProvider(object: dummyToolItem()))
dragItem.localObject = toolData
return [dragItem]
由于只有我的本地UICollectionView
会接受此数据并使用localObject
,因此伪实现并不重要,仍然可以用于识别类型是ToolBarItem
。
我想有更好的方法可以做到这一点,但这个解决方案是有效的。