我想要更改从基于视图和数据源的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的图像和文本字段中提取的)是从哪里来的?
发布于 2012-12-14 01:12:19
事实证明,该图像是从NSTableCellView获得的。因此,钩子是覆盖它的子类中的-(NSArray *)draggingImageComponents。
发布于 2014-03-02 20:52:03
这有点尴尬:
在你的data source中,你可以设置通过参数传递给tableView:draggingSession:willBeginAtPoint:forRowIndexes:的NSDraggingSession实例上的图片。
然后,可以在NSDraggingSession实例上使用enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:方法来更改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];
}];https://stackoverflow.com/questions/12903228
复制相似问题