2009-06-29 2 views

답변

1

먼저 table data source에서 테이블 행을 드래그하는 데 필요한 메소드를 구현하십시오. 행을 나타내는 데이터를 드래그해서 하나 이상의 데이터 유형으로 붙여 넣습니다. 이를 위해 사용할 경로 유형은 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

예. 당신 말이 맞아요. 나는 그것을 구현할 것이다. 다시 한 번 감사드립니다. :) –