如何禁用拖出我的Cocoa应用程序?

时间:2012-01-02 21:32:04

标签: objective-c macos cocoa

我有一个Cocoa Mac应用程序,它在应用程序中使用拖放功能。我想禁用从我的应用程序拖动图像到其他应用程序,如Finder。有没有办法做到这一点?

1 个答案:

答案 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用户希望拖放到“正常工作”,打破它会使你的应用程序脱颖而出,而且不是很好。