如何在MacOS Lion中从NSButton进行拖动

时间:2012-05-06 11:53:23

标签: objective-c macos drag-and-drop

我有NSButton什么接受拖放将拖动的项目添加到NSMutableArray。如何从NSButton拖动以拖动NSMutableArray中的所有项?

1 个答案:

答案 0 :(得分:2)

一种方法是使用NSView方法,dragImage:at:offset:event:pasteboard:source:slideBack:开始拖动。在您的自定义按钮类中,您将覆盖mouseDown:并调用该方法。我写了一个例子,其中拖动的图像是按钮的图像,我拖动的数据只是字符串“ARRAY”。这应该是你需要从源端做的所有事情 - 当你把它放在你的目的地时,它可以测试看看是什么被删除的是字符串“ARRAY”,然后做你想做的任何你创建的数组与你的第一滴。我在按钮中使用了NSMultipleDocuments图像,当我拖出按钮时,它会消失。

- (void)mouseDown:(NSEvent *)theEvent {
     NSImage *pic = self.image;
     NSSize dragOffset = NSMakeSize(0.0, 0.0);
     NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
    [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType]  owner:self];
    [pboard writeObjects:[NSArray arrayWithObject:@"ARRAY"]];
    NSPoint btnMiddle = NSMakePoint(self.frame.size.width/2,self.frame.size.height/2);
    NSPoint picOrigin = NSMakePoint(btnMiddle.x - pic.size.width/2, btnMiddle.y + pic.size.height/2);
    self.image = nil;
    [self dragImage:pic at:picOrigin offset:dragOffset event:theEvent pasteboard:pboard source:self slideBack:YES];
}