在MacRuby应用程序中拖动事件的麻烦

时间:2011-11-14 19:30:41

标签: ruby cocoa macruby

自从我完成了任何Cocoa开发以来已经有一段时间了,而我正试图让这个非常快速和简单(简单)的应用程序完成。我决定使用MacRuby,因为它是学习它的一个很好的借口,而且应用程序很简单,有意义。

但是我无法获得自定义视图以响应拖动事件。

class ImportPanel < Panel
  def initWithFrame(frame)
    registerForDraggedTypes(NSArray.arrayWithObjects(NSPasteboardTypeSound, nil))
    super(frame)
  end

  def mouseDown(event)
    NSLog('click')
  end

  def draggingEntered(sender)
    NSLog('drag')
  end
end

Panel,在这种情况下,只是一个添加边框的NSView。此自定义视图(ImportPanel)正在响应单击事件,但根本不响应拖动事件。我已经为registerForDraggedTypes:尝试了几种不同的粘贴板类型和配置,但似乎都没有产生任何结果。

1 个答案:

答案 0 :(得分:0)

这段代码对我有用。

AppDelegate.rb

class AppDelegate
    attr_accessor :window
    attr_accessor :panel

    def applicationDidFinishLaunching(a_notification)
        # nothing special here
    end

    def initialize
        @panel = Panel.new

        # Just for debug
        puts @panel
    end
end

这是我的player.rb

class Panel < NSView
    def awakeFromNib
        registerForDraggedTypes(NSArray.arrayWithObjects(NSFilenamesPboardType, NSURLPboardType, NSStringPboardType, nil))
    end

    def mouseDown(event)
        NSLog('click')
    end

    def draggingEntered(sender)
        NSLog('drag')
        return NSDragOperationNone
    end
end

拖动类型数组就是这种方式来帮助我测试不同的拖动操作(URL,文件等)。请注意,draggingEntered需要返回使用NSDragOperation的{​​{1}},以查看其是否有效。