NSCollectionView:只接受项目之间的拖动,而不是超过

NSCollectionView: Accept Drag Only Between Items, not Over

我实施了 NSCollectionView 并且工作正常。然而,当 拖动项目以重新排列它们,我只想接受拖动 对象之间。

当前行为是您可以在对象之间拖动(它会打开一个 space) 但也 over 一个对象。我希望下面的图片能说明问题。 例如,将一个项目拖到 #2 上,会将它放在 #2 之前。我想要 禁用它并只接受中间的拖动。

在下图中:

  1. 原始状态
  2. 项目 #0 被拖#1 和#2
  3. 之间
  4. 项目 #0 被拖 超过 #2(结果相同)

所以,经过更多的研究,我发现 validadeDrop 方法有 一个准确描述的参数,如果操作结束或在 之间。由于它是作为参考给出的,因此可以更改 覆盖特定行为的参数。所以,解决方案是添加 此检查方法:

- (NSDragOperation)
    collectionView:(NSCollectionView *)collectionView
      validateDrop:(id<NSDraggingInfo>)draggingInfo
     proposedIndex:(NSInteger *)proposedDropIndex
     dropOperation:(NSCollectionViewDropOperation *)proposedDropOperation
{
    /* ... */

    if (*proposedDropOperation == NSCollectionViewDropOn)
        *proposedDropOperation =  NSCollectionViewDropBefore;

    /* ... */
}