2012-11-12 3 views
3

NSView에서 testig 끌어다 놓을 수 있지만 draggingEntered:은 호출되지 않습니다. 코드 :NSView에서 드래그 앤 드롭

#import <Cocoa/Cocoa.h> 
@interface testViewDrag : NSView <NSDraggingDestination> 
@end 

@implementation testViewDrag 
- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) 
{ 
    [self registerForDraggedTypes:[NSImage imagePasteboardTypes]]; 
    NSLog(@"initWithFrame"); 
} 
return self; 
} 

-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender 
{ 
NSLog(@"draggingEntered"); 
return NSDragOperationEvery; 
} 

-(NSDragOperation) draggingUpdated:(id<NSDraggingInfo>)sender 
{ 
    NSLog(@"draggingUpdated"); 
    return NSDragOperationEvery; 
} 
@end 

인터페이스 빌더에 기본 창에 subView (클래스가 testViewDrag로 설정 됨)를 추가합니다. 로그의 은 initWithFrame 로그를 볼 수 있지만 아무 것도 드래그하지 않으면 로그에 표시됩니다.

나는 무엇이 누락 되었습니까?

답변

7

"드래그 작업을 받으려면 NSWindow 및 NSView에서 정의 된 registerForDraggedTypes : 메시지를 개체에 보내 창이나보기에서 허용 할 붙여 넣기 유형을 등록하고 NSDraggingDestination 프로토콜에서 여러 메서드를 구현해야합니다. 끌기 세션에서 후보 대상은 드래그되는 대지 보드 데이터의 유형과 일치하는 대지 보드 유형에 대상이 등록 된 경우에만 NSDraggingDestination 메시지를받습니다. 대상은 이미지가 입력 될 때이 메시지를 수신하고 내부로 이동 한 다음 종료되거나 해제됩니다 목적지 경계 내에서. " 끌어서 놓기 프로그래밍에 대한 자세한 내용은 here을 참조하십시오. 내가 보았 듯이, 당신의 문제는 당신의 registerForDraggedTypes: 메쏘드에서 정의한 논쟁에 있습니다.

이로 대체하십시오 :

[self registerForDraggedTypes:[NSArray arrayWithObjects: 
     NSColorPboardType, NSFilenamesPboardType, nil]]; 

희망이 도움이! (ID ) 보낸 사람 { 있는 NSArray * thefiles = : (BOOL) performDragOperation -

+0

은 당신이 지금 어떻게 얻을 말해 줄 수 있다면 드래그 파일의 경로 : 예를 들어 –

+2

, , 마법처럼 당신에게 그 일을 감사 [발신자 드래그 붙여 넣기] propertyListForType : NSFilenamesPboardType]; // 여기에서 원하는 내용을 처리하십시오. } –

+0

정말 도움을 주시면 고맙겠습니다. 응용 프로그램의 las 지점이었습니다. 정말 고마워요. –