Keydown в объективе-C
[ОБНОВЛЕНО ПОСЛЕ ПЕРВОГО ПОБЕДИТЕЛЯ] Я попытался найти способ использовать и реализовать параметр keyDown в Objective C. Но когда я пробую его, он всегда терпит неудачу...
Может ли кто-нибудь дать мне пример того, как это делается. Я понимаю Objective C хорошо, и полное объяснение не требуется.
Я удалил метод в -(void) keyDown
потому что это не сработало.
Это мой код сейчас:
#import <Cocoa/Cocoa.h>
@interface ViewController : NSView {
IBOutlet id pressLabel;
}
@end
#import "ViewController.h"
@implementation ViewController
-(BOOL) acceptsFirstResponder
{
return YES;
}
-(BOOL) becomeFirstResponder
{
return YES;
}
-(BOOL) resignFirstResponder
{
return YES;
}
-(void)keyDown:(NSEvent *)theEvent
{
NSString *theUpArrow = [NSString stringWithFormat:@"%c",NSUpArrowFunctionKey];
if( [[theEvent characters] isEqualToString:theUpArrow]){
[pressLabel setStringValue:@"Pressed"];
} else {
[super keyDown:theEvent];
}
}
@end
2 ответа
keyDown:
является методом NSResponder, обычно реализуемым в представлениях. Этот класс называется Controller, что предполагает, что он не является представлением, и, следовательно, не будет получать события нажатия клавиши. Вы, вероятно, хотите вместо этого представить это в виде.
[self keyDown:theEvent];
Это не решит вашу проблему, но я думаю, что для строки выше, вы хотите использовать super
и не self
, Если вы используете self
он снова будет вызывать один и тот же метод и будет снова и снова вызывать один и тот же метод, в конечном итоге приводя к сбою приложения, когда в стеке больше нет места.