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

标签 objective-c macos cocoa drag-and-drop nscollectionview

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

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

在下面的图片中:

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

drag and drop

最佳答案

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

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

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

    /* ... */
}

关于objective-c - NSCollectionView:只接受项目之间的拖动,而不是超过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32314283/

相关文章:

Objective-C [在 OS X Leopard 上] 垃圾回收,无问题

objective-c - 无法执行使用 GNUstep 编译的程序

ios - 仅在iPod中崩溃

macos - 如何使用 JXA 单击 UI 元素

macos - 在 Mac 终端应用程序中 move 选项卡的快捷方式?

macos - cocoa webview 上的弹出窗口

objective-c - 有没有办法获取另一个 NSString 中出现的 NSString 的 NSRanges 的 NSArray?

ios - UIScrollView 在 iOS 中使用计时器滑动

objective-c - Cocoa 中的文件共享发现

javascript - 在 Chrome/Mac 上强制 DOM 重绘/刷新