【问题标题】:How to make drag from NSButton in MacOS Lion如何在 MacOS Lion 中从 NSButton 进行拖动
【发布时间】:2012-05-06 11:53:23
【问题描述】:

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

【问题讨论】:

  • 您能进一步解释一下吗?将项目放在按钮上后,您想知道如何将它们放入数组中,还是想知道如何将它们拖出按钮?
  • 我已经在放置后将它们放入一个数组中。我不知道如何将它们拖出按钮。

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


【解决方案1】:

一种方法是使用 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];
}

【讨论】:

  • 它有效,但有一个问题 - 现在我无法点击按钮拨打clickAction
  • 我认为这可能会很棘手——我尝试添加 [super mouseDown:theEvent] 并且那种工作,但它似乎只是每隔一次工作(如果你先点击而不是拖动,图像消失)。为什么要以任何方式将项目拖到按钮上,这对我来说有点奇怪?
  • 按钮打开带有表格的窗口(支持拖放)。但我也想在不打开此窗口的情况下拖放到/从按钮。用于显示 ARRAY 内容的表格。
  • 我想我不知道如何使用一个简单的按钮来完成这项工作——您可能需要制作一个更复杂的控件,该控件有一个拖放区来进行拖放,而其余的控件将充当按钮。
  • 好的,我会试试的。感谢您的帮助)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
相关资源
最近更新 更多