如何只允许在 NSTableView 中的行之间删除行?

How to allow drops only *between* rows in NSTableView?

我有一个基于视图的 NSTableView,它接受从取景器中放入的图像。我希望能够在指定的放置位置插入新图像(下面的左侧示例)并防止放置在行本身上(下面的右侧示例)。

我查看了委托方法和 NSTableView 属性和方法,但没有找到防止行上掉落的方法。有什么想法吗?

: 截图中没有渲染光标。在左边的示例中,我拖入了一个名为 Pic_3.png 的文件,NSTableView 通过在将插入新图像的位置画一条线来响应。在右边的示例中,我继续拖动并将其放置在 table 视图中的现有行上。我没有任何意义插入 on 一个现有的项目,所以我想防止这种行为。

委托方法

         func tableView(_ tableView: NSTableView,
                  validateDrop info: NSDraggingInfo,
                    proposedRow row: Int,
proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation

处理拖动行为。参数proposedDropOperation传递当前NSTableView.DropOperation。 Return 指定 NSDragOperation if operation is .above otherwise .none。例如

if dropOperation == .above {
   info.animatesToDestination = true
   return .move
} else {
   return .none
}

另一个 DropOperation 案例 .on 表示在行上拖动。