可拖动的NSButton

时间:2011-02-08 20:13:40

标签: objective-c cocoa macos

有没有办法使NSButton可拖动?我的意思是在最终构建的应用程序中,用户可以拖动NSButton。

我正在尝试做一些几乎“仪表板”式的东西......就像可拖动的东西一样。目前,我只是使用保留在原位的NSButton,但如果它们可以被拖拽则会很好。

4 个答案:

答案 0 :(得分:5)

NSButton通常会吃掉所有鼠标事件。因此,您必须子类化NSButton,并且不仅要覆盖拖动处理,还要覆盖单击处理:

- (void)mouseDown:(NSEvent *)theEvent
{
    [self highlight:YES];
}

- (void)mouseDragged:(NSEvent *)event
{
// start a dragging session
}

- (void)mouseUp:(NSEvent *)theEvent
{
    [self performClick:self];
}

答案 1 :(得分:3)

我从标准Drag-and-drop infrastructure开始。即使你可能没有使用所有的功能,它通常是一个很好的起点,并为你处理很多棘手的案例。

答案 2 :(得分:1)

添加深度:

您需要继承NSButton并覆盖:

-(void)mouseDragged:(NSEvent *)theEvent{

//With:

    NSRect gframe = self.frame;
    gframe.origin.x = theEvent.locationInWindow.x;
    [self setFrame:gframe];
}

答案 3 :(得分:0)

在UIControl类,UITouch和事件处理指南中查看“continueTrackingWithTouch:withEvent:”。基本思路是为TouchDragInside事件创建一个处理程序,使用事件中的位置数据来更新按钮的中心。

如果你在iOS上工作,这将是一个非常方便的建议,你不是。

快速浏览一下NSControl和NSView中的一些内容,我确信它可以完成,我只是没有快速回答,而且我的时间很短。 :(

基本上,我们的想法是捕捉mouseDown事件,并开始关注鼠标位置,按每次检查时鼠标移动的相对相对数量更新按钮的位置。

如果需要,可以稍晚。