如何在Cocoa应用程序中处理ESC键?

Eon*_*nil 23 cocoa keyboard-shortcuts

我做了一个应用程序切换到全屏模式.我想使用ESC键来转义全屏模式,但是在运行时删除IB中的绑定菜单项到ESC键.如何将ESC键绑定到菜单项?

Eon*_*nil 48

在Cocoa中处理转义键的首选方法就像@Josh Caswell说的那样.

#pragma mark - NSResponder
- (void)cancelOperation:(id)sender
{
    [self exitFullScreen];
}
Run Code Online (Sandbox Code Playgroud)


pha*_*ian 10

捕获键盘事件的一种方法涉及子类化:

  1. 对您的全屏类(例如)NSView进行子类化.
  2. 将方法添加- (void) keyDown:(NSEvent *)theEvent到子类实现中.
  3. 打开InterfaceBuilder并选择之前创建的全屏类.
  4. 将其类更改为新的子类.

子类看起来像:

MySubclass.h

@interface MySubclass : NSView {
}
@end
Run Code Online (Sandbox Code Playgroud)

MySubclass.m

#import <Carbon/Carbon.h>
@implementation MySubclass
- (void)keyDown:(NSEvent *)theEvent
{       
    switch([theEvent keyCode]) {
        case kVK_Escape:
            NSLog(@"ESC");
                    // Call the full-screen mode method
            break;
        default:
            [super keyDown:theEvent];
    }
}
@end
Run Code Online (Sandbox Code Playgroud)

这不会将ESC键绑定到菜单项,但它确实为您提供了相同的功能(并且由于您可以拦截所有键盘事件,因此更具灵活性).

  • 另一种选择是实现`cancelOperation:`,它也响应⌘-. (10认同)