【问题标题】:Drag and Drop within NSCollectionView在 NSCollectionView 中拖放
【发布时间】:2010-08-27 15:41:10
【问题描述】:

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

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

我想添加的两件事,我迷路了。

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

2) 我希望能够在 NSCollectionView 中单击并抓取一个项目,将其拖到我的 NSCollectionView 中的另一个位置,然后放下它以重新排序我的 indexNumbers。

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

【问题讨论】:

    标签: cocoa


    【解决方案1】:

    我想在 NSOutlineView 上进行拖放操作,我发现 Jonathan Dann's source code 非常有用。

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

    【讨论】:

    【解决方案2】:

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

    #define arbitraryDataTypeForInterRowDragging @"arbitraryDataTypeForInterRowDragging". 
    

    然后你像这样在acceptDrop委托方法中使用它:

    NSData *rowData = [pboard dataForType:arbitraryDataTypeForInterRowDragging]; 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多