Cocoa NSOutlineView拖动图像

Cocoa NSOutlineView拖动图像,cocoa,drag-and-drop,nsoutlineview,nsdragginginfo,nsdraggingitem,Cocoa,Drag And Drop,Nsoutlineview,Nsdragginginfo,Nsdraggingitem,我想更改从基于视图和数据源的NSOutlineView拖动项目时使用的图像,但似乎找不到挂钩。我试过修改 - (void)dragImage:(NSImage *)anImage at:(NSPoint)viewLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag 在

我想更改从基于视图和数据源的
NSOutlineView
拖动项目时使用的图像,但似乎找不到挂钩。我试过修改

- (void)dragImage:(NSImage *)anImage at:(NSPoint)viewLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag
在RowView、TableCellView和
NSOutlineView
本身的子类中,但没有任何效果


有人知道默认图像(显然是从tableCellView的图像和文本字段中获取的)来自何处吗?

事实证明,该图像是从NSTableCellView获得的。因此,钩子将覆盖-(NSArray*)在该类的子类中拖动ImageComponents。

这有点尴尬:
从中,您可以在通过参数传递给您的
NSDraggingSession
实例上设置图像,例如到
tableView:draggingSession:willBeginAtPoint:forRowIndexes:

然后,您可以使用
NSDraggingSession
实例上的方法更改
NSDraggingItems
的实际拖动图像:

   [session enumerateDraggingItemsWithOptions:NSDraggingItemEnumerationConcurrent
                                      forView:tableView
                                      classes:[NSArray arrayWithObject:[NSPasteboardItem class]]
                                searchOptions:nil
                                   usingBlock:^(NSDraggingItem *draggingItem, NSInteger index, BOOL *stop)
    {
       [draggingItem setDraggingFrame:NSMakeRect(0, 0, myWidth, myHeight)
                             contents:myFunkyDragImage];
    }];

对于记录:不要使用NSMakeRect(0,0,myWidth,myHeight)帧是!!不要尝试使用任何一个会话。dragginglocation@Xav ?? 你为什么不呢?在我们的代码库中,跨多个操作系统版本轻松工作