NSOutlineView перетащить изображение
Я хочу изменить изображение, используемое при перетаскивании элемента из представления на основе источника данных 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)?
2 ответа
Оказывается, изображение получено из NSTableCellView. Таким образом, хук должен переопределить -(NSArray *)draggingImageComponents в подклассе этого.
Это немного неловко
Из вашего источника данных вы можете установить изображения на 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];
}];