2010-01-20 55 views
0

大家好,我是新手,我有什麼,我預計會是一個很容易回答的問題。爲了學習一些關於事件處理和繪圖,我試圖寫繪製一個黑色的矩形,在長度每個用戶點擊「C」鍵時,會增加程序。到目前爲止,它只是在藍色背景上繪製一個黑色的矩形,而不響應按鍵。以下是我迄今爲止:可可:接受和響應按鍵

Input.h

#import <Cocoa/Cocoa.h> 


@interface Input : NSView { 

int length; 

} 

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

Input.m

#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 

我從可可複製該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,但恐怕它仍然不能正常工作:(。我覺得這應該是如此基本,但似乎我已經打了一堵牆。任何其他的想法或建議? 再次,非常感謝。 – 2010-01-20 23:32:46

+0

看到更新以上。如果失敗,並登錄不上去的消息,那麼我們將不得不挖一個深一點。 – walkytalky 2010-01-21 08:53:51

+0

好吧!你是男人。謝謝了很多。這是令人沮喪的挫折感。該setNeedsDisplay方法奏效了。我不知道爲什麼,但我的印象是,有觀點正在積極重繪。再次感謝您抽出時間來助陣初學者。 – 2010-01-21 09:54:53