2009-10-06 3 views
1

Apple 설명서를 읽으려고했으나 NSDocument 응용 프로그램에 키 이벤트 (공간 또는 기타)를 캡처하는 방법을 찾을 수 없습니다.NSDocument 및 키보드 (keyDown 같은)

잘 이해했다면 initialFirstRepsodner로 할 수 없습니다.

아이디어가 있으십니까?

덕분에! Andrea

+0

하는 데 도움이 m

희망 ... ... –

+0

나는 http://developer.apple.com/mac/library/DOCUMENTATION/의 정보를 믿고 Cocoa/Conceptual/EventOverview/HandlingKeyEvents/HandlingKeyEvents.html # // apple_ref/doc/uid/10000060i-CH7은 NSDocument 기반 응용 프로그램에 적용해야합니다. – geoffspear

+0

잘 이해한다면 가능하지 않습니다. –

답변

0

창으로가는 모든 이벤트를 캡처하려면 하위 클래스로 만들고 -sendEvent :를 재정의 할 수 있습니다. 전체 앱에서 모든 이벤트를 캡처하려면 NSApplication 하위 클래스에서 같은 메서드를 재정의 할 수 있습니다.

+0

그것은 분명하지 않습니다. Cocoa 개발자에게는 초보자입니다. Apple의 QTRecorder 샘플로 작업하고 있습니다. 모든 이벤트를 처리하고 싶다면 NSDocument의 하위 클래스 인 다른 클래스를 추가해야합니까? –

1

Apple 설명서를 읽으려고했으나 NSDocument 응용 프로그램에 키 이벤트 (공간 또는 기타)를 캡처하는 방법을 찾을 수 없습니다.

키 이벤트를 어떻게 처리 하시겠습니까? 어딘가에 keyDown:을 구현해야하지만, 정확히 무엇을 할 것인가에 달려 있습니다.

+0

스페이스 키로 비디오 캡처를 시작하고 중지하고 Enter 키를 눌러 프레임을 캡처해야합니다. NSDocument 클래스에서 keyDown을 구현했지만 nib 파일에서 첫 번째 응답자를 정의하는 위치를 알지 못합니다. –

+0

그렇지 않습니다. IB의 첫 번째 응답자 아이콘에 대해 설명하는이 의견을 참조하십시오. http://stackoverflow.com/questions/598455/objective-c-cocoa-first-responder-did-i-get-that-right/598663#598663 –

+0

작업 : 글로벌 단축키를 원하는 것처럼 들립니다. Cocoa 응답 체인을 통해 구현하지는 않지만 Carbon Events 바로 가기 키를 사용하십시오. (이름에도 불구하고 이들은 64 비트에서 여전히 지원됩니다.) Cocoa 기반 API를 Carbon 기반 API 위에 두는 PTHotKey라는 타사 클래스도 있습니다. –

-1

NSUserDefaults를 사용하고 공유 된 전역 키 콤보를 저장 한 다음 keyDown을 확인하는 것이 좋습니다. 저장된 환경 설정에 대해 다음 키를 눌렀을 때의 동작을 기반으로합니다.

예 : #DEFINE kMyKeyCommand 당신은 NSWindow 표시의 서브 클래스를 만들 수있는 모든의 "I"

0

먼저 @. xcode에서 수행 할 작업 : 파일 -> 새 파일 -> 목표 C 클래스. "NSWindowMyEvents"와 같은 이름을 지정하십시오. 즉,이 개 파일을 생성합니다 : &하는 .m을있는 .h의 NSWindowMyEvents.h로 이동하게 선언을 다음과 같이

@interface NSWindowMyEvents : NSWindow { 

} 

변경 사항 저장을하고 있는지 IB는 새로운 헤더 0을 읽고 있는지 확인하기 (컴파일 이미 열려 있음).

오픈 인터페이스 빌더 및 문서/주 창을 포함하는 nib/xib 파일을로드하십시오. 파일 소유자의 "창"콘센트가 기본 창으로 설정되어 있는지 확인하십시오. 메인 윈도우 (이벤트를 얻으려는 윈도우)를 클릭하고 (Identity inspector cmd + 6을 통해) 클래스를 NSWindowMyEvents가되도록 설정하십시오.

변경 사항을 저장하십시오!

다시 엑스 코드와 NSWindowMyEvents.m 다음 코드를 붙여 넣기로 이동 : 당신이 원하는 경우

- (void)keyDown:(NSEvent *)theEvent 
{ 
    NSLog(@"keyDown!"); 
    if ([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask) 
    { 
     NSLog(@"CommandKey Down!"); 
    } 

    [super keyDown:theEvent]; 
} 

체인 응답자 나머지 이벤트를 전달, 슈퍼에 이벤트를 보내기. 이제 키보드 이벤트를 처리하고 있습니다. 마찬가지로 NSWindowMyEvent에서 모든 이벤트를 처리 할 수 ​​있습니다.나는의 소유자를 파일로 InitialFirstResponder을 설정할 수 없습니다

+0

아, 공간 ctr을 처리하기 위해 다음 코드를 사용할 수 있습니다 ... if ([theEvent keyCode] == 36) ... (리턴 키입니다) – Vassilis