objective-c - NSOutlineView:拖动项目时避免出现黄色边框?

标签 objective-c cocoa drag-and-drop nstableview nsoutlineview

当我将行从 NSTableView 拖动到另一个 NSOutlineView 时,NSOutlineView 会出现黄色突出显示边框。我该如何避免这种情况?

准确地说,只有当我将表中的行拖到 NSTableView 的可用空间(即不在任何项目上)时,才会发生这种情况。但是,当我将行直接拖动到 NSOutlineView 中的项目上时,黄色边框不会显示,但(当然)项目会自行选择。

NSOutlineViews 数据源中的 outlineView:validateDrop:proposedItem:proposedChildIndex: 的重要部分如下所示:

- (NSDragOperation)outlineView:(NSOutlineView *)outlineView 
                  validateDrop:(id <NSDraggingInfo>)info 
                  proposedItem:(id)item 
            proposedChildIndex:(NSInteger)index
{
    if ([info draggingSource] == myOtherTableView) {
        [outlineView setDropItem:item 
                  dropChildIndex:NSOutlineViewDropOnItemIndex];
        return NSDragOperationMove;
    }

    return NSDragOperationNone;
}

感谢您的帮助!

最佳答案

当 NSOutlineView 提议不在任何特定项目上放置时(导致您看到的整个边框突出显示),它将传入 nil 的 item 并NSOutlineViewDropOnItemIndex 的 propishedChildIndex。您可以对此进行测试,以判断 NSOutlineView 何时建议进行此放置,并返回 NSDragOperationNone 以根本不允许在该区域进行放置。

- (NSDragOperation)outlineView:(NSOutlineView *)outlineView 
                  validateDrop:(id <NSDraggingInfo>)info 
                  proposedItem:(id)item 
            proposedChildIndex:(NSInteger)index
{
    if ([info draggingSource] == myOtherTableView) {
        if (item == nil)
            return NSDragOperationNone;
        else
        {
            [outlineView setDropItem:item 
                  dropChildIndex:NSOutlineViewDropOnItemIndex];
            return NSDragOperationMove;
        }
    }
    return NSDragOperationNone;
}

关于objective-c - NSOutlineView:拖动项目时避免出现黄色边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3439352/

相关文章:

c++ - 如何丢弃 QEvent 而不是忽略它

ios - 依赖分析错误,XCode 4.6

ios - 从 SQLite 检索行花费太多时间

Java 拖放和鼠标监听器

javascript - 为什么 event.clientX 在 firefox 中对于 dragend 事件错误地显示为 0?

cocoa - NSStatusItem "kCG..."错误

objective-c - 将类 "GPUImageRawDataOutput"的 Objective C 代码转换为 Swift

objective-c - 升级到 Xcode 4.1 和 sqlite3.h 导致编译错误,而升级前没有

cocoa - 如何使用 DateTimeFormatter 将此字符串转换为 Unix 时间?

cocoa - 当模式对话框打开时如何接收通知