Objective-C 中的 keydown

发布于 2024-10-28 06:29:26 字数 859 浏览 7 评论 0原文

[在第一个 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

[UPDATED AFTER FIRST AWNSER]
I have tried to find a way to use and implement the keyDown option in Objective C. But when I try it, it always fails...

Can anyone give me an example of how this is done. I understand Objective C good and a full explaination is not needed.

I deleted the method in -(void) keyDown because it wasn't working.

This is my code now:

#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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

残月升风 2024-11-04 06:29:27

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

keyDown: is an NSResponder method, typically implemented in views. This class is named Controller, which would suggest it isn't a view, and thus won't receive key down events. You probably want to put it in a view instead.

腻橙味 2024-11-04 06:29:27
    [self keyDown:theEvent];    

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

    [self keyDown:theEvent];    

This doesn't solve your problem, but I think for the line above, you want to use super and not self. If you use self it will invoke the same method again, and it will keep invoking the same method over and over, eventually crashing your application once there is no more stack space.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文