【问题标题】:How to allow drops only *between* rows in NSTableView?如何只允许在 NSTableView 中的 * 行之间删除?
【发布时间】:2016-02-11 08:26:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: swift cocoa nstableview appkit


    【解决方案1】:

    委托方法

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

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

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

    另外一个DropOperationcase.on代表在行上拖动。

    【讨论】:

    • 我们可以对大纲视图进行同样的检查吗?
    • 是的,NSTableViewNSOutlineView 的子类
    • proposedDropOperationNSOutlineViewvalidateDrop 委托方法中不可用。还有其他方法吗?
    • 是的,dropOperation 不是参数。那么如何确定它是.on还是.above
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多