0

ドラッグ ソースであるカスタム ビューがあります。許可されているドラッグ操作をコピーのみに制限したいので、dragingSession:sourceOperationMaskForDraggingContext: メソッドで NSDragOperationCopy を返します。

何らかの理由で、これは効果がありません。

NSDragOperationNone を返すと期待どおりに機能し、ドラッグがブロックされるため、コードに問題はないようです。

以下は、ドラッグ元である私の NSView のコードです。ビューから「ごみ箱」にドラッグすると、NSDragOperationCopy 操作のみを許可したい場合でも、NSDragOperationMove または NSDragOperationDelete が表示されます。

私が話していることを示すために、小さなデモ プロジェクトもアップロードしました: 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);
}

誰?

どうも!

4

0 に答える 0