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];
    }];
Другие вопросы по тегам