2012-01-02 3 views
1

나는 응용 프로그램 내에서 끌어서 놓기를 사용하는 Cocoa Mac 응용 프로그램을 가지고 있습니다. 내 응용 프로그램의 이미지를 Finder와 같은 다른 응용 프로그램으로 드래그하지 못하게하고 싶습니다. 이것을 할 수있는 방법이 있습니까?내 코코아 앱에서 드래그를 해제하려면 어떻게합니까?

+3

왜 * 기능 *을 사용하지 않으시겠습니까? –

+0

비슷한 상황이 있습니다. 애플리케이션 내에서 NSWindow를 드래그하려고하고 드래그 데이터가 NSString이므로 파싱하고 NSWindow가 드래그 된 것을 알 수 있습니다. 내 응용 프로그램 외부에서 드래그 된 문자열은 내부 정보를 표시하는 것 외의 의미가 없습니다. –

답변

1

이미지가 앱 외부로 드래그되는 것을 방지해야하는 진정한 이유가있는 경우 Info.plist에서 내부 전용 드래그의 드래그 유형으로 사용할 수있는 declare your own UTI을 사용해야합니다.

그런 다음 사용자 정의 UTI를 지정하여 판지 유형을 선언하십시오. 예를 들어,보기에 드래그 지원 :

물론
//the UTI string should match the one in your Info.plist 
static NSString* kYourCustomUTIType = @"com.yourCompany.internalDragType"; 

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    NSSize dragOffset = NSZeroSize; 
    NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard]; 

    [pboard declareTypes:[NSArray arrayWithObject:kYourCustomUTIType] owner:self]; 
    [pboard setData:[[self image] TIFFRepresentation] forType:kYourCustomUTIType]; 

    [self dragImage:[self image] at:[self imageLocation] offset:dragOffset 
     event:theEvent pasteboard:pboard source:self slideBack:YES]; 

    return; 
} 

, 당신이 당신의 드래그 대상뿐만 아니라 내부 드래그 유형을 이해하고 있는지 확인해야 할 것입니다.

그러나 일반적으로 이미지가 앱 외부로 드래그되지 않아야하는 실제적인 이유가 없다면 기본 동작을 허용해야합니다. Mac 사용자는 끌어서 놓기가 "잘 작동"할 것으로 기대하며,이를 깨뜨림으로서 앱을 돋보이게 만듭니다. 좋은 방법이 아닙니다.

관련 문제