我有一个NSCollectionView,它被正确配置为根据在NSArrayController中找到的内容显示核心数据实体。这些名为MyManagedType的核心数据实体被定义为包括一个int32索引号"indexNumber“以保持其有序,以及二进制NSData *myData。我也可以通过单击项目来选择它们,但我不能“单击并拖动”它们。我只需要能够一次选择一个项目(最好是实际上)。
我通过将文件从finder拖放到NSCollectionView来填充NSArrayController。它通过获取文件名来接受被删除的文件。然后我打开文件,进行处理,填充myData,获得一个新的indexNumber (indexNumber =持久化存储中的MyManagedType实体的数量),并将该NSManagedObject *插入到我的持久化存储中。这很好用。
我想补充的两件事是,我迷路了。
1)我希望能够在NSCollectionView中单击并抓取一个项目,将其拖到视图(或窗口)之外,然后将其拖放到“扑扑”状态,并将其从我的持久性存储中删除。
2)我希望能够单击并抓取NSCollectionView中的项目,将其拖动到我的NSCollectionView中的另一个位置,然后将其放置以重新排序我的indexNumbers。
这里的主要问题是,我不知道要设置什么拖放类型来处理--在我现有的代码中,它是文件名,但现在它是什么?我已经读过几次类参考,我理解很多方法的作用,但我就是不能理解我是如何实现#1和#2的。
发布于 2010-09-01 02:15:59
我想在NSOutlineView上使用拖放功能,我发现Jonathan Dann's source code非常有用。
您可能希望将其签出并尝试将其修改为与NSCollectionView一起使用。
发布于 2011-03-25 22:16:01
对于表视图,奇怪的是,视图本身的数据拖动类型是您设置的任意字符串,如下所示:
#define arbitraryDataTypeForInterRowDragging @"arbitraryDataTypeForInterRowDragging". 然后在acceptDrop委托方法中使用它,如下所示:
NSData *rowData = [pboard dataForType:arbitraryDataTypeForInterRowDragging]; NSCollectionView委托方法似乎遵循相同的模式。
https://stackoverflow.com/questions/3585820
复制相似问题