2012-01-02 65 views
1

我有一個可在應用程序中使用拖放操作的Cocoa Mac應用程序。我想禁用從我的應用程序拖動像圖像一樣的其他應用程序,如Finder。有沒有辦法做到這一點?如何禁用拖出我的Cocoa應用程序?

+3

爲什麼要禁用*功能*? – 2012-01-02 21:34:57

+0

我有類似的情況。我想在應用程序中拖動'NSWindow's,拖動數據是一個'NSString',所以我可以解析它並知道'NSWindow'被拖動了什麼。在我的應用程序之外,拖動的字符串除了暴露內部信息之外沒有任何意義。 – 2013-05-11 22:20:42

回答

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用戶希望通過拖放來「只是工作」,並通過打破它,讓您的應用脫穎而出,而不是一個好方法。

相關問題