从NSTableView拖放到NSImageView

时间:2009-06-29 08:07:34

标签: objective-c cocoa drag-and-drop

我需要从包含图像路径的NSTableView中拖出一行并将其拖放到NSImageView上,并且拖动行的图像应该出现在imageview中。帮助赞赏

2 个答案:

答案 0 :(得分:2)

非常感谢。它确实奏效了。我为NSStringPboardType和NSFilenamesPboardType注册了NSImageView和NSTableView。然后在我使用的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;
}

在NSImageView NSDragging Destination非正式协议中,使用以下代码。

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

答案 1 :(得分:1)

首先,在table data source中,实现表行拖动所需的方法。您将表示行的数据放在一个或多个数据类型的拖动粘贴板上。您将使用的一种类型是NSFilenamesPboardType,它采用一系列路径名。

然后,创建一个可以在drop中处理NSFilenamesPboardType的NSImageView的子类。 (您需要实现the NSDraggingDestination informal protocol中的方法。)然后使您的图像视图成为此子类的实例,而不是NSImageView,以及NSFilenamesPboardType的{​​{3}}实例。