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

时间:2016-02-11 08:26:24

标签: swift cocoa nstableview appkit

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

我查看了委托方法和NSTableView属性和方法,但看不到阻止 drop-on-rows 的方法。有什么想法吗?

Screenshot showing the drop-between-rows (left) and drop-on-rows (right) behaviour.

:光标尚未在屏幕截图中呈现。在左侧示例中,我拖动一个名为Pic_3.png的文件,NSTableView通过在插入新图像的位置绘制一条线来响应。在右边的示例中,我继续拖动并将其放置在表视图中的现有行上。将插入现有项目没有任何意义,所以我想阻止此行为。

1 个答案:

答案 0 :(得分:7)

委托方法

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

处理拖动行为。参数proposedDropOperation传递当前NSTableView.DropOperation。如果NSDragOperationoperation,则返回指定的.above,否则为.none。例如

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

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