【问题标题】:How to drag and drop an enum in Xcode, Swift?如何在 Xcode、Swift 中拖放枚举?
【发布时间】:2020-04-08 21:47:24
【问题描述】:

我有一个简单的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 嵌入到一个类中并实现NSItemProviderWritingNSItemProviderReadingCodable 以创建一个项目提供者。但这很混乱,我希望有更好的解决方案,因为它只是一个enum

我很乐意收到任何帮助或建议。

【问题讨论】:

    标签: ios swift enums uicollectionview drag-and-drop


    【解决方案1】:

    由于还没有答案,我想与有同样问题的人分享我目前的解决方案:

    我创建了一个名为dummyToolItem 的类,它符合NSItemProviderWritingNSItemProviderReading。这些实现虽然没有功能,但它们不需要,因为它们永远不会被使用。

    我现在像这样创建我的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

    我想有更好的方法可以做到这一点,但这个解决方案有效。

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      相关资源
      最近更新 更多