2013-12-13 4 views
0

Edit: это первая часть была решенаRubymotion: как я могу определить событие mouseDown для NSView?

Извините за, вероятно, нуб вопрос, но я искал в течение двух дней, не находя ответа. Я прочитал документацию Objective-C по обработке событий, но я действительно не могу перевести это на Rubymotion.

Я просто пытаюсь определить событие mouseDown в NSView, которое содержит подвью с изображением.

Подсказка? Спасибо.

Новый выпуск

Пример кода:обновляется с новым вопросом (смотреть на комментарии)

class ViewController < NSView 


    def loadWindow 
    @window = NSWindow.alloc.initWithContentRect([[400, 500], [480, 200]], 
     styleMask: NSTitledWindowMask|NSClosableWindowMask, 
     backing: NSBackingStoreBuffered, 
     defer: false) 
    @window.setTitle("Test") 

    @cView = ViewController.alloc.initWithFrame([[400,500], [480, 200]]) 
    @window.setContentView(@cView) 

    @iView = NSImageView.alloc.initWithFrame([[100,100], [30, 30]]) 
    @iView.setImage(NSImage.imageNamed "Icon") 

    @cView.addSubview(@iView) 

    @window.orderFrontRegardless 
    @window.makeKeyWindow 

    @var = "variable" 
    puts @var    # This works and puts "variable" 

    end 

    def mouseDown(event) 
    puts "mouse click" # This puts "mouse click" 
    puts @var    # This puts a blank line 
    end 
end 

ответ

0

Ваш ответ был в документации, но вы просто пропустили:)

Обработка события mouse down обрабатывается родительским классом NSView NSResponder: https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/classes/NSResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/NSResponder/mouseDown:

Вам просто нужно определить mouseDown на вашем представлении.

class MyView < NSView 

    def mouseDown(event) 
    # what you want to do 
    end 

end 
+0

Я уже пробовал так, но это не работает. Может быть, мне не хватает чего-то другого. – vash

+0

Я обновил первое сообщение с помощью примера – vash

+0

@vash, правильно ли вы подклассифицировали свое представление, потому что это правильный способ сделать это. Вы должны просмотреть свой код, так как у вас есть класс ViewController, который наследуется от NSView ... – siekfried

0

если использовать Sugarcube драгоценный камень, вы можете достичь его, как это:

button = UIButton.alloc.initWithFrame([0, 0, 10, 10]) 

button.on(:touch) { my_code } 
button.on(:touch_up_outside, :touch_cancel) { |event| 
    puts event.inspect 
    # my_code... 
} 

# remove handlers 
button.off(:touch, :touch_up_outside, :touch_cancel) 
button.off(:all) 

деталь: https://github.com/rubymotion/sugarcube

+0

Sugarcube недоступен на osx. – siekfried

+0

@siekfried теперь поддерживает как ios, так и osx. – anguskwan