自从我完成了任何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:尝试了几种不同的粘贴板类型和配置,但似乎都没有产生任何结果。
答案 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}},以查看其是否有效。