在NSCollectionView中拖放

时间:2010-08-27 15:41:10

标签: cocoa

我有一个NSCollectionView,它已正确配置为根据NSArrayController中的内容显示核心数据实体。这些名为MyManagedType的核心数据实体被定义为包括一个int32索引号“indexNumber”以保持它们的有序,以及二进制NSData * myData。我也可以点击它们来选择项目,但我不能“点击并拖动”它们。我只需要一次选择1个项目(实际上最好)。

我通过将文件从finder拖放到NSCollectionView来填充NSArrayController。它通过获取FILENAMES接受丢弃的文件。然后我打开文件,进行处理,填充myData,获取一个新的indexNumber(indexNumber =持久存储中的MyManagedType实体的#),并将此NSManagedObject *插入到我的持久存储中。这很有效。

我要添加的两件事,我迷失了。

1)我希望能够在NSCollectionView中单击并抓取一个项目,将其拖到视图(或窗口)之外,然后将其拖放到“poof”它并将其从持久存储中删除。

2)我希望能够在NSCollectionView中单击并抓取一个项目,将其拖动到我的NSCollectionView中的另一个SPOT,并将其删除以重新排序我的indexNumbers。

这里的主要绊脚石是我不明白什么是拖放类型来设置自己处理 - 我现有的代码是文件名,但它现在是什么?我已经多次阅读了类引用,我理解了很多方法的作用,但我无法理解我如何实现#1和#2。

2 个答案:

答案 0 :(得分:1)

我想在NSOutlineView上拖放工作,我发现Jonathan Dann's source code非常有帮助。

您可能需要检查它并尝试修改它以与NSCollectionView一起使用。

答案 1 :(得分:0)

使用表格视图,来自视图本身的数据的拖动类型奇怪地是您设置的任意字符串,如下所示:

#define arbitraryDataTypeForInterRowDragging @"arbitraryDataTypeForInterRowDragging". 

然后在acceptDrop委托方法中使用它,如下所示:

NSData *rowData = [pboard dataForType:arbitraryDataTypeForInterRowDragging]; 

NSCollectionView委托方法似乎遵循相同的模式。