- (void)keyDown :( NSEvent *)事件不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了- (void)keyDown :( NSEvent *)事件不起作用相关的知识,希望对你有一定的参考价值。

下面是示例代码。

- (void) keyDown: (NSEvent *) event
{
    NSString *chars = [event characters];
    unichar character = [chars characterAtIndex: 0];

    if (character == 27) {
        NSLog (@"ESCAPE!");
    }
} 

我是否需要在Interface Builder中设置任何委托或任何类型的绑定?

帮助感谢......

答案

需要在keyDown子类中重写NSView,该子类的对象被设置为第一响应者。响应者链应该传递事件,但是为了确保你得到它,确保你的对象是第一响应者。

另一答案

在cocoa中,只有视图参与此事件的响应者链。所以你应该覆盖一些视图方法。简单的方法是找出哪个视图是您想要处理和使用它的特定事件的第一响应者。

窗口将keyDown(with: )直接发送给第一响应者,它可以处理它或传递给响应者链。并非所有观点都能通过事件。 NSCollectionView不传递键事件。它会发出颠簸声。

您想要处理的键也可能是Key等效的read more here。如果是这样,您应该覆盖performKeyEquivalent(with :)方法来接收此类事件。此事件不同于keyDown事件,从窗口传递到所有子视图,直到有人处理它们。

如前所述NSCollectionView keyDown(with :)方法不会将响应事件链上的键事件传递给它。要在其中一个超级视图中处理此类事件,您应首先在集合视图中覆盖它,并通过调用self.nextResponder?.keyDown(with:event)手动发送事件,以便您自己处理此类事件。

以上是关于- (void)keyDown :( NSEvent *)事件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何用C#来屏蔽ALT+F4

c# winfrom程序中 enter键关联button按钮

c# keydown事件问题

UserControl KeyDown 事件不会触发撤销 Windows 应用程序 KeyDown 事件

Keydown事件发生两次

jQuery(document).on("keydown",...) 有效,但不是 document.addEventListener("keydown",..