2009-06-29 5 views

答えて

1

まず、table data sourceに、テーブル行のドラッグに必要なメソッドを実装します。行を表すデータを1つ以上のデータ型のドラッグペーストボードに配置します。これに使用するタイプの1つはNSFilenamesPboardTypeで、パス名の配列をとります。

次に、NSFilenamesPboardTypeを処理できるNSImageViewのサブクラスを作成します。 (the NSDraggingDestination informal protocolからメソッドを実装する必要があります)。次に、NSImageViewの代わりにこのサブクラスのインスタンスをイメージビューにし、NSFilenamesPboardTypeを表示するregisterを表示させます。

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宛先非公式プロトコルでは、次のコードを使用します。

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

歓声:)

+0

あなたが唯一のドラッグタイプのため、受信ビュー(イメージ図)ではなく、送信ビュー(テーブルビュー)を登録する必要があります。テーブルビューでのドロップも許可しない限り、それ以上のデータソースメソッドが必要です。 –

+0

また、あなたが奪ったものを解放することを忘れないでください。 Cocoaのメモリ管理プログラミングガイドを参照してください。http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/ –

+0

はい。あなたが正しいです。私はそれを実装します。 ありがとうございました。 :) –

関連する問題