我有一个Cocoa Mac应用程序,它在应用程序中使用拖放功能。我想禁用从我的应用程序拖动图像到其他应用程序,如Finder。有没有办法做到这一点?
答案 0 :(得分:1)
如果确实有必要阻止将图像拖到应用程序之外,那么您应该在Info.plist中使用declare your own UTI作为内部拖动的拖动类型。< / p>
然后在声明粘贴板类型时指定自定义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用户希望拖放到“正常工作”,打破它会使你的应用程序脱颖而出,而且不是很好。