-1

[第一个 AWNSER 后更新] 我试图找到一种在 Objective C 中使用和实现 keyDown 选项的方法。但是当我尝试它时,它总是失败......

谁能给我一个如何做到这一点的例子。我理解 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
4

2 回答 2

7

keyDown:是一个 NSResponder 方法,通常在视图中实现。这个类被命名为Controller,这表明它不是一个视图,因此不会接收到按键事件。你可能想把它放在一个视图中。

于 2011-03-31T21:09:22.680 回答
1
    [self keyDown:theEvent];    

这并不能解决您的问题,但我认为对于上面的行,您想使用super而不是self. 如果您使用self它,它将再次调用相同的方法,并且它会一遍又一遍地调用相同的方法,一旦没有更多的堆栈空间,最终会使您的应用程序崩溃。

于 2011-03-31T23:01:05.170 回答