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

Dan*_*ell 4 cocoa nstableview appkit swift

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

我看了一个委托方法和NSTableView属性和方法,但看不到防止drop-on-rows的方法.有任何想法吗?

屏幕截图显示了行间(左)和行上行(右)行为.

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

vad*_*ian 7

委托方法

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

处理拖动行为.该参数proposedDropOperation传递当前值NSTableView.DropOperation.NSDragOperation如果operation不是,.above则返回指定的.none.例如

if dropOperation == .above {
   info.animatesToDestination = true
   return .move
} else {
   return .none
}
Run Code Online (Sandbox Code Playgroud)

另一种DropOperation情况.on表示拖动该行.