我尝试在同一个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
}..。但是,当请求移动完整的对象时,只将部分对象写到黑板上看起来很奇怪,对吗?
如果需要的话,我如何才能将参数对象实际地写到黑板上呢?
当使用拖放时,在后面的场景中会发生什么呢?
非常感谢!
发布于 2018-03-23 08:49:07
我没有使用画板收集视图,但我有轮廓视图。如果您只是重新排序内部拖动的项目,您实际上不需要完全使用粘贴功能-它的设计允许泛型类型在不同的应用程序之间传递。
你可以做相当于这样的事情:
func outlineView(_ outlineView: NSOutlineView, pasteboardWriterForItem item: Any) -> NSPasteboardWriting? {
pasteboardItem.setString("Something to pass - not used", forType:MyConstants.pasteboardType)
return pasteboardItem
}您需要有某种方式在上面的函数中对拖动的项进行内部缓存。然后,在“接受”栏中,您只需检查您的pasteboard类型并使用您的缓存。
https://stackoverflow.com/questions/49328461
复制相似问题