Проблема с событиями перетаскивания в приложении 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

Панель в данном случае — это просто NSView, добавляющий границу. Это пользовательское представление (ImportPanel) правильно реагирует на события кликов, но совсем не реагирует на события перетаскивания. Я пробовал несколько разных типов и конфигураций картона для registerForDraggedTypes:, но ни один из них не дал никаких результатов.


person farski    schedule 14.11.2011    source источник


Ответы (1)


Этот код работал для меня.

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, я использовал NSDragOperationNone, просто чтобы посмотреть, работает ли он.

person microspino    schedule 13.12.2011