[英]How to drag and drop an enum in Xcode, Swift?
我有一个简单的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
嵌入到 class 并实现NSItemProviderWriting
、 NSItemProviderReading
和Codable
以创建项目提供者的信息。 但这非常混乱,我希望有一个更好的解决方案,因为它只是一个enum
。
我很乐意收到任何帮助或建议。
由于还没有答案,我想与有同样问题的人分享我目前的解决方案:
我创建了一个名为dummyToolItem
的 class ,它符合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
。
我想有一种更好的方法可以做到这一点,但这个解决方案有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.