2010-01-20 7 views
0

안녕하세요 여러분, 저는 초보자이며 예상 한 바가 대답하기 쉬운 질문 일 것입니다. 이벤트 처리 및 그리기에 대해 조금 배우기 위해 사용자가 'c'키를 누를 때마다 길이가 증가하는 검은 색 사각형을 그려주는 프로그램을 작성하려고합니다. 지금까지는 키 입력에 응답하지 않고 파란색 배경에 검정 사각형을 그립니다. 여기에 지금까지 무엇을 가지고 :코코아 : 키 스트로크 허용 및 응답

Input.h

#import <Cocoa/Cocoa.h> 


@interface Input : NSView { 

int length; 

} 

- (void)keyDown:(NSEvent *)theEvent; 
@end 

#import "Input.h" 


@implementation Input 

- (id)initWithFrame:(NSRect)frame { 
    self = [super initWithFrame:frame]; 

length = 10; 

    if (self) { 
     // Initialization code here. 
    } 
    return self; 
} 

- (void)drawRect:(NSRect)dirtyRect { 
//set variables 
NSRect r1; 
NSBezierPath *bp; 

    // set background color 
[[NSColor blueColor] set]; 
NSRectFill(dirtyRect); 

//set color to black & draw r1 
[[NSColor blackColor] set]; 
r1 = NSMakeRect(1, 1, length, 10); 
bp = [NSBezierPath bezierPathWithRect:r1]; 
[bp fill]; 


} 

- (void)keyDown:(NSEvent *)theEvent 
{ 
    NSString *key = [theEvent characters]; 

    if ([key isEqualToString:@"c"]) { 
     length += 10; 
    } 
} 

@end 

Input.m

나는 그런데, 간단히 말해서 코코아에서를 keyDown 방법을 복사. 말할 것도없이, 나는 그것을 정말로 이해하지 못한다. 프로그램에 키 입력을 인식 시키려면 IB에서 연결해야합니까? 기본적으로 누군가가이 프로그램을 작동 시키도록 도와 줄 수 있다면 좋겠지 만, 키 스트로크에 응답하는 데 아무 것도 입지 않았기 때문에 나는 그것을 좋아할 것입니다.

그리고 여기이보기가 첫 번째로 반응하게 할 필요가 키 입력을받을 수, Cocoa in a Nutshell

답변

1

IIRC을합니다.

- (BOOL) acceptsFirstResponder 
{ 
    return YES; 
} 
- (BOOL) resignFirstResponder 
{ 
    return YES; 
} 
- (BOOL) becomeFirstResponder 
{ 
    return YES; 
} 

(. 적절한 경우는 물론, 그들도 다른 물건을 할 수 있습니다)

업데이트 : 당신은 또한 당신의보기를 표시해야 이러한 방법 같은 것을 추가 할 경우 작동합니다 다시 그릴 필요가있다. 추가 :

[self setNeedsDisplay:YES]; 

귀하의 이벤트 처리기에 추가하십시오. 그리고 처음에는 로그 메시지를 추가하는 것이 좋습니다. 그러면 메소드가 호출되는지 확인할 수 있습니다.

NSLog(@"keyDown [%@]", [theEvent characters]); 
+0

적시에 응답 해 주셔서 감사합니다. 나는 정말로 누군가가 그것을 빨리 되 찾을 것으로 기대하지 않았다. Input.m에 이러한 메서드를 추가했지만 여전히 작동하지 않는 것이 두려워요. (이 기본 뭔가가 있어야한다고 생각하지만 아직 벽에 부딪힌 것 같습니다. 다른 아이디어 나 제안 사항 ? –

+0

위의 업데이트를 참조하십시오. 실패하고 메시지가 기록되지 않으면 조금 더 자세히 조사해야합니다. – walkytalky

+0

괜찮습니다! 왜 그런지 모르겠지만 뷰가 활발하게 다시 그려지고 있다는 느낌을 받았습니다. 다시 초보자를 도와 주셔서 감사합니다. –