Перетащите из NSTableView в NSImageView - PullRequest
1 голос
/ 29 июня 2009

Мне нужно перетащить строку из NSTableView, содержащую путь к изображению, и перетащить ее поверх NSImageView, и изображение перетаскиваемой строки должно появиться в представлении изображения. Помощь оценена

Ответы [ 2 ]

2 голосов
/ 30 июня 2009

Спасибо большое. Это действительно сработало. Я зарегистрировал NSImageView и NSTableView для NSStringPboardType и NSFilenamesPboardType. Затем в TableView делегат я использовал следующий код.

- (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard
{
    NSString *string = [filePath objectAtIndex:[rowIndexes firstIndex]];
    [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
    [pboard setString:string forType:NSStringPboardType];
    return YES;
}

А в неофициальном протоколе NSDragging Destination NSImageView используется следующий код.

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
    NSString *str = [[sender draggingPasteboard] stringForType:NSStringPboardType];
    myImage = [[NSImage alloc] initWithContentsOfFile:str];
    [self setImage:myImage];
    [self setNeedsDisplay: YES];
    return NSDragOperationCopy;
}

ура :) 1007 *

1 голос
/ 29 июня 2009

Сначала в вашем источнике данных таблицы реализуйте необходимые методы для перетаскивания строк таблицы. Вы поместите данные, представляющие строку, на монтажную панель перетаскивания в одном или нескольких типах данных. Один тип, который вы будете использовать для этого, - NSFilenamesPboardType, который принимает массив путей.

Затем создайте подкласс NSImageView, который может обрабатывать NSFilenamesPboardType в каплях. (Вам нужно будет реализовать методы из неформального протокола NSDraggingDestination .) Затем заставьте ваше изображение просматривать экземпляр этого подкласса вместо NSImageView, и зарегистрировать это представление для NSFilenamesPboardType .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...