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 ?? 你为什么不呢?在我们的代码库中,跨多个操作系统版本轻松工作