4

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

- (void)dragImage:(NSImage *)anImage at:(NSPoint)viewLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag

在 rowViews、tableCellViews 和NSOutlineView自身的子类中,但无济于事。

有谁知道默认图像(显然是从 tableCellView 的图像和文本字段中获取的)来自哪里?

4

2 回答 2

2

原来图片是从NSTableCellView中获取的。所以钩子是在它的子类中覆盖 -(NSArray *)draggingImageComponents 。

于 2012-12-13T17:12:19.230 回答
0

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

然后,您可以使用实例enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:上的方法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];
    }];
于 2014-03-02T12:52:03.390 回答