【发布时间】:2009-06-29 08:07:34
【问题描述】:
我需要从包含图像路径的 NSTableView 中拖出一行并将其放在 NSImageView 上,并且被拖行的图像应该出现在 imageview 中。帮助表示赞赏
【问题讨论】:
标签: objective-c cocoa drag-and-drop
我需要从包含图像路径的 NSTableView 中拖出一行并将其放在 NSImageView 上,并且被拖行的图像应该出现在 imageview 中。帮助表示赞赏
【问题讨论】:
标签: objective-c cocoa drag-and-drop
非常感谢。它真的奏效了。我为 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;
}
干杯:)
【讨论】:
首先,在您的table data source 中,实现表格行拖动的必要方法。您将以一种或多种数据类型将表示该行的数据放到拖动粘贴板上。您将为此使用的一种类型是NSFilenamesPboardType,它采用路径名数组。
然后,创建一个可以处理 NSFilenamesPboardType 的 NSImageView 子类。 (您需要实现来自the NSDraggingDestination informal protocol 的方法。)然后让您的图像视图成为这个子类的实例,而不是NSImageView,并让register 成为NSFilenamesPboardType 的那个视图。
【讨论】: