NSCollectionView完成了drop事件

时间:2015-09-22 15:01:48

标签: macos cocoa drag-and-drop nstableview nscollectionview

我正在使用在NSCollectionView中显示svg图标的应用程序。我想实现拖放功能,以允许用户将svg拖到Finder或其他应用程序。我有两个问题:

1。)要实现拖动到另一个应用程序我使用NSFilenamesPboardType for registerForDraggedTypes并在collectionView中:writeItemsAtIndexes:toPasteboard:创建临时文件并将其写入[pasteboard writeObjects:@ [fileURL]];因为collectionView:namesOfPromisedFilesDroppedAtDestination:forDraggedItemsAtIndexes:在这种情况下不调用。这是正确的实施吗?我找不到如何以另一种方式为svg实现拖放。

2.。)我如何接收掉落的回调?数据源中的NSTableView具有方法tableView:draggingSession:endedAtPoint:操作,用于确定拖动结束。对于NSCollectionView,此方法未记录,但存在于NSCollectionViewDelegate中。我可以使用它,应用程序会通过审核吗?

感谢您的任何建议

2 个答案:

答案 0 :(得分:1)

有一个可用于10.7的NSCollectionViewDelegate方法:

- collectionView:draggingSession:endedAtPoint:dragOperation:

在将项目删除到接收应用程序之后调用方法。

答案 1 :(得分:0)

collectionView:namesOfPromisedFilesDroppedAtDestination:forDraggedItemsAtIndexes:如果使用NSFilesPromisePboardType,将调用它。您可以在删除后创建文件。如果其他应用程序不接受承诺的文件,则无效。

看起来Apple忘记将新的拖放委托方法10.7添加到NSCollectionViewDelegate的文档中。你可以使用它们。