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

时间:2011-05-13 15:38:49

标签: cocoa keyboard-shortcuts

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

4 个答案:

答案 0 :(得分:43)

在Cocoa中处理转义键的首选方法是@Josh Caswell said

#pragma mark - NSResponder
- (void)cancelOperation:(id)sender
{
    [self exitFullScreen];
}

答案 1 :(得分:10)

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

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

    MySubclass.h

    @interface MySubclass : NSView {
    }
    @end
    

    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
    

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

答案 2 :(得分:1)

许多人尝试实现esc密钥功能。响应程序链中有cancelOperation来处理转义事件。

.svg

答案 3 :(得分:0)

当按下ESC时我需要躲避WKWebView崩溃(?)所以我对它进行了分类,并添加了:

import Carbon.HIToolbox

override func keyDown(with event: NSEvent) {
    if event.keyCode == UInt16(kVK_Escape) {
        //  We crash otherwise, so just close window
        self.window?.performClose(event)
    }
    else
    {
        // still here?
        super.keyDown(with: event)
    }
}