使用NSTableView作为拖动源自定义拖动图像

uch*_*aka 5 drag-and-drop nstableview nstablecellview

当tableView是拖动源时,是否需要子类化NSTableView或NSTableCellView来创建自定义拖动图像?

如果没有,我错过的神奇方法是什么?我似乎找不到任何可靠的东西.

NSTableCellView子类可以(略微神秘地)覆盖:

@property(retain, readonly) NSArray *draggingImageComponents (将合成的NSDraggingImageComponent实例数组(谁知道它们以何种方式合成...))

NSTableView本身就有

- (NSImage *)dragImageForRowsWithIndexes:(NSIndexSet *)dragRows tableColumns:(NSArray *)tableColumns event:(NSEvent *)dragEvent offset:(NSPointPointer)dragImageOffset

但这些确实是子类化选项.

有人知道另一种技术吗?(10.8+是目标)

Jay*_*Jay 2

在您的数据源中,您需要通过您的tableView:draggingSession:willBeginAtPoint:forRowIndexes:方法设置图像,如下所示

   [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];
    }];
Run Code Online (Sandbox Code Playgroud)