我有一个作为拖动源的自定义视图。我想将允许的拖动操作限制为仅一个副本,因此我在 draggingSession:sourceOperationMaskForDraggingContext: 方法中返回 NSDragOperationCopy。
由于某种原因,这没有效果。
我的代码似乎没有任何问题,因为返回 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);
}
任何人?
谢谢!