1
我有一個可在應用程序中使用拖放操作的Cocoa Mac應用程序。我想禁用從我的應用程序拖動像圖像一樣的其他應用程序,如Finder。有沒有辦法做到這一點?如何禁用拖出我的Cocoa應用程序?
我有一個可在應用程序中使用拖放操作的Cocoa Mac應用程序。我想禁用從我的應用程序拖動像圖像一樣的其他應用程序,如Finder。有沒有辦法做到這一點?如何禁用拖出我的Cocoa應用程序?
如果您有一個真正的原因,您必須防止將圖像拖出應用程序,那麼您應該在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用戶希望通過拖放來「只是工作」,並通過打破它,讓您的應用脫穎而出,而不是一個好方法。
爲什麼要禁用*功能*? – 2012-01-02 21:34:57
我有類似的情況。我想在應用程序中拖動'NSWindow's,拖動數據是一個'NSString',所以我可以解析它並知道'NSWindow'被拖動了什麼。在我的應用程序之外,拖動的字符串除了暴露內部信息之外沒有任何意義。 – 2013-05-11 22:20:42