위젯을 서브 클래스 화하고 keyDown 메소드를 정의한 다음 InterfaceBuilder에서 keyDown 메소드로 정의한 클래스로 위젯 클래스를 지정하면 정상적으로 작동하는 것 같습니다.Xcode와 IB를 사용하지 않으면 keyDown이 호출되지 않는 이유는 무엇입니까?
그러나 아래의 간단한 스크립트에서 설명한 것처럼 프로그래밍 방식으로 완료하면 keyDown 메서드가 호출되지 않습니다. 왜 이런거야?
Xcode에서 앱이 장면 뒤에서 발생하는 이벤트를 수신 대기하도록 설정하고 있습니까? 그것은 무엇이며, 여기서 어떻게합니까? 저를 올바른 방향으로 가르쳐주십시오.
사과 문서를 다시 읽고, 이벤트 핸들러 등록이 진행 중인지 확인하려고합니다. 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
이것은 작동합니다. 고맙습니다! – aryeh