Как перетащить перечисление в Xcode, Swift? - PullRequest
1 голос
/ 09 апреля 2020

У меня есть простая 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.

Я был бы очень рад получить любую помощь или совет.

1 Ответ

1 голос
/ 09 апреля 2020

Поскольку ответов пока нет, я хотел бы поделиться своим текущим решением для людей с такой же проблемой:

Я создал класс с именем 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.

Я мог бы представить, что есть лучший способ сделать это но это решение работает.

...