将允许的操作限制为仅NSDragOperationCopy

时间:2012-12-12 12:05:06

标签: cocoa drag-and-drop

我有一个自定义视图,它是一个拖动源。我想将允许的拖动操作限制为仅一个副本,因此我在draggingSession中返回NSDragOperationCopy:sourceOperationMaskForDraggingContext:方法。

由于某种原因,这没有任何效果。

我的代码似乎没有任何问题,因为返回的NSDragOperationNone按预期工作并阻止拖动。

以下是来自我的NSView的代码,它是拖动源代码。从视图拖动到“废纸篓”,您将看到NSDragOperationMove或NSDragOperationDelete,即使我只想允许NSDragOperationCopy操作。

我还上传了一个小型演示项目来演示我正在谈论的内容:https://dl.dropbox.com/u/368222/test.zip

- (void)mouseDown:(NSEvent *)event {
    NSString *path = [[NSBundle mainBundle] resourcePath];
    NSString *imagePath = [path stringByAppendingString:@"/image.png"];

    NSImage *image = [[NSImage alloc] initWithContentsOfFile:imagePath];

    NSArray *file = [NSArray arrayWithObject:imagePath];
    NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
    [pboard declareTypes:[NSArray arrayWithObject:NSFilenamesPboardType] owner:nil];
    [pboard setPropertyList:file forType:NSFilenamesPboardType];

    [self dragImage:image at:NSZeroPoint offset:NSMakeSize(0, 0) event:event pasteboard:pboard source:self slideBack:NO];
}

- (NSDragOperation)draggingSession:(NSDraggingSession *)session sourceOperationMaskForDraggingContext:(NSDraggingContext)context {
    return NSDragOperationCopy;
}

- (void)draggingSession:(NSDraggingSession *)session endedAtPoint:(NSPoint)screenPoint operation:(NSDragOperation)operation {
    NSLog(@"Dragging session ended with operation: %li", operation);
}

任何?

THX!

0 个答案:

没有答案