Когда я создаю подкласс виджета и определяю метод keyDown, а затем в InterfaceBuilder назначаю класс виджета тем классом, который я определил с помощью метода keyDown, он, кажется, работает нормально.
Однако, если я выполню это программно, как показано в простом скрипте ниже, метод keyDown никогда не будет вызван. Почему это?
Есть ли что-то настраиваемое XCode, которое заставляет приложение прослушивать события, которые выполняются за кулисами? Что это, и как мне сделать это здесь? Пожалуйста, укажите мне в правильном направлении.
Я собираюсь снова прочитать документы Apple и попытаться выяснить, происходит ли регистрация обработчика событий, которую XCode настраивает для меня. Однако, если вы знаете, что это такое, пожалуйста, дайте мне знать.
Спасибо!
framework 'Cocoa'
class MyView < NSView
def acceptsFirstResponder
true
end
def keyDown(event)
puts "key down MyView"
end
end
class MyWindow < NSWindow
def acceptsFirstResponder
true
end
def keyDown(event)
puts "key down in MyWin"
end
end
class MyApp < NSApplication
def acceptsFirstResponder
true
end
def keyDown(event)
puts "key down in MyApp"
end
end
application = MyApp.sharedApplication
# create the window
frame = [0.0, 0.0, 300, 200]
mask = NSTitledWindowMask | NSClosableWindowMask
window = MyWindow.alloc.initWithContentRect(frame,
styleMask:mask,
backing:NSBackingStoreBuffered,
defer:false)
# assign a content view instance
content_view = MyView.alloc.initWithFrame(frame)
window.contentView = content_view
window.makeFirstResponder(window)
# show the window
window.display
window.makeKeyAndOrderFront(nil)
application.run