스위프트에서 키보드의 키를 눌렀는지 감지하는 방법을 찾고 있습니다. 어떤 아이디어와 제안도 크게 감사 할 것입니다.스위프트에서 키 누르기 이벤트 감지
답변
질문을 업데이트했으며 창에 대해이를 수행하는 방법을 알고 싶으므로 다음은 답변입니다. NSWindow를 서브 클래스 화하고이 서브 클래스를 대신 사용하십시오. 당신은/엑스 코드 인터페이스 빌더에서 창을했다면
import Cocoa
class EditorWindow: NSWindow {
override func keyDown(event: NSEvent) {
super.keyDown(event)
Swift.print("Caught a key down: \(event.keyCode)!")
}
}
(⌥ + ⌘ 경위를 창 개체를 클릭하고 속성으로 이동 :
사용자 정의 클래스는 다음과 같이한다 +). Attribute Inspector는 오른쪽의 사이드 바에 있습니다. 인터페이스 빌더에서 창을 선택했는지 확인하려면 속성 관리자 상단의 Custom Class
영역에 새 클래스를 클래스 입력에 넣으십시오. 내 응용 프로그램에이 창 클래스에서 이벤트를 전달하기 위해
나는 그때 콜백 함수의 배열에 저장하는 콜백 함수를 받아들이는 창에 함수를 추가합니다. 현재 주 창에 약한 참조를 얻을 수있는 AppDelegate를 통해이 창에 액세스 할 수 있습니다. 그런 다음 위의 함수에서 전체 콜백을 반복하고 NSEvent를 인수로 호출합니다. 또한 먼저 이벤트에 대한 modifierFlags
속성을 통해 옵션 키와 같은 명령 키가 먼저 눌러져 있는지 확인합니다. 그것은 다음과 같이 찾고 끝 :
import Cocoa
typealias Callback = (NSEvent) ->()
class KeyCaptureWindow: NSWindow {
var keyEventListeners = Array<Callback>()
override func keyDown(event: NSEvent) {
if event.modifierFlags.contains(NSEventModifierFlags.CommandKeyMask) {
super.keyDown(event)
return
}
for callback in keyEventListeners {
callback(event)
}
}
func addKeyEventCallback(callback: Callback) {
keyEventListeners.append(callback)
}
}
그리고이 후 다른 곳에서 내 코드에서 내가 지금과 같은 라인이 있습니다
let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
let mainWindow = appDelegate.getWindow()
mainWindow.addKeyEventCallback(handleKeyEvent)
내가 내 응용 프로그램 위임 클래스에
getWindow
방법을 추가합니다. 이 메서드는 캐스팅을
KeyCaptureWindow
으로 반환합니다. 이 모든 것을 수행하는 더 좋은 방법이있을 수 있지만 이것은 나를 위해 작동합니다. 이것을 할 수있는 또 다른 방법은 첫 번째 응답자와
NSView
을 사용하는 것입니다.하지만 그 방법은 제가 해오 던 방식이 아닙니다.
이것은 정말 도움이됩니다. 정말 고마워요. – andertonslase
컴퓨터에 키보드가 여러 개 연결되어있는 경우 짝수 키보드의 출처를 확인할 수 있습니까? – OrangePot
Swift의 최신 버전이이 기능을 수정했습니다. 이제 keyDown입니다 (이벤트 : NSEvent 포함). 매우 유익한 답변 주셔서 감사합니다! –
keyDown
-method를 재정의해야합니다.
var direction:String = ""
override func keyDown(theEvent: NSEvent!) // A key is pressed
{
if theEvent.keyCode == 123
{
direction = "left" //get the pressed key
}
else if theEvent.keyCode == 124
{
direction = "right" //get the pressed key
}
println("Key with number: \(theEvent.keyCode) was pressed")
}
- 1. JS 이벤트 개체가없는 키 누르기 감지
- 2. 특정 키 누르기 감지
- 3. 키 누르기 이벤트
- 4. 자바 키 누르기 이벤트
- 5. Ctrl + Tab 키 누르기 감지
- 6. Java에서 여러 키 누르기 감지
- 7. Java v2에서 키 누르기 감지
- 8. 차단하지 않고 키 누르기 감지
- 9. 키 누르기 감지 시도 중
- 10. IOS 스위프트에서 화면 잠금 해제 이벤트 감지
- 11. 콘솔 응용 프로그램에서 런타임 키 누르기 감지
- 12. jQuery 키 누르기 이벤트 문제
- 13. 키 누르기 이벤트 매핑 Qt
- 14. 전화에서 Jquery 키 누르기 이벤트
- 15. 자바 스크립트 키 누르기 이벤트
- 16. 이어폰 키 누르기 이벤트 사용
- 17. 일본어 텍스트의 키 누르기 이벤트
- 18. 이전 키 누르기 이벤트 취소하기
- 19. C 키의 키 누르기 이벤트
- 20. Tkinter 키 누르기 트리거 이벤트
- 21. 이벤트 변경시 키 누르기 이벤트 비활성화
- 22. 키 이벤트 감지
- 23. 글로벌 키 이벤트 감지
- 24. 파이썬 ctypes로 Shift 키 누르기 감지
- 25. 콘솔 mfc 프로그램에서 이스케이프 키 누르기 감지
- 26. JS에서 이중 Ctrl 키 누르기 감지
- 27. 홈 키 이벤트 감지 방법
- 28. GWT에서 (KEY_ENTER) 키 누르기 이벤트 발생
- 29. 크롬 확장 프로그램의 특정 키 누르기 이벤트
- 30. 키 누르기 이벤트 내가 추적 코드가
너 자신을 어떻게 생각하니? –
이것은 중복되지 않습니다. 객관적인 -C 답은 신속한 질문에 대해 중복되지 않습니다. –
어떤 상황에서 키 누르기를 감지하고 싶습니까? 창문에? 입력? –