我尝试在同一NSCollectionViewItem
内移动NSCollectionView
以允许重新排序项目。集合视图项是一个自定义项,表示包含自定义对象Parameter
的字符串的多个标签:
class Parameter: NSObject {
var parameterName: String
var parameterNominal: Double
var parameterUpperTolerance: Double
var parameterLowerTolerance: Double
var parameterDistribution: String
var parameterNotes: String
var parameterDataArray: [Double]
// MARK: - Initialization Methods
...
}
现在,我是否必须将整个项目/对象写入' NSPasteboard'正确使用NSCollectionView
内的拖放?
大多数拖放示例都适用于使用....register(forDraggedTypes: [NSPasteboardTypeString])
将字符串写入粘贴板。
我目前将其中一个项目字符串写入粘贴板,拖放开始正常:
func collectionView(_ collectionView: NSCollectionView, pasteboardWriterForItemAt indexPath: IndexPath) -> NSPasteboardWriting? {
let pb = NSPasteboardItem()
pb.setString(ParameterList.sharedInstance.parameters[indexPath.item].parameterName, forType: NSPasteboardTypeString)
return pb
}
...但是在请求移动整个对象时,只将部分对象写入粘贴板看起来很奇怪,对吗?
如何将参数对象实际写入粘贴板(如果需要)?
使用拖放时,粘贴板中的数据会在场景后发生什么?
非常感谢!
答案 0 :(得分:1)
我还没有使用带有集合视图的粘贴板,但我有大纲视图。如果您只是重新排序内部拖动的项目,那么您并不需要完全使用粘贴功能 - 它旨在允许通用应用程序传递泛型类型。
你可以做相同的事情:
func outlineView(_ outlineView: NSOutlineView, pasteboardWriterForItem item: Any) -> NSPasteboardWriting? {
pasteboardItem.setString("Something to pass - not used", forType:MyConstants.pasteboardType)
return pasteboardItem
}
您需要有一些内部缓存上述函数中拖动项目的方法。然后,在接受丢弃中,您只需检查您的粘贴板类型并使用缓存。