- (空)的keyDown:(NSEvent *)事件不工作(- (void) keyDown: (

2019-09-17 09:32发布

下面是示例代码。

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

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

我是否需要设置任何委托InterfaceBuilder下或任何还挺结合?

帮助表示赞赏...

Answer 1:

keyDown需要以被重写NSView子类,其目的被设定为第一响应者。 响应链应该向下传递的事件,但可以肯定你得到它,请确保您的目标是第一个响应者。



Answer 2:

在可可只意见参与响应链此事件。 所以,你应该重写一些观点方法。 最简单的方法是找出哪些观点是要处理的,并用它特定事件的第一个响应者。

窗口发送keyDown(with: )挺直,其可以处理它或传递最多响应链第一响应。 并非所有的意见传递活动起来。 NSCollectionView没有通过关键事件。 它起着一个凸起的声音来代替。

这也有可能是要处理的关键是等价键 在这里阅读更多 。 如果是这样你应该重写performKeyEquivalent(有:)的方法来获得这种类型的事件,而不是。 这不像的keyDown事件事件从窗口向下传递到所有子视图,直到有人处理它们。

如前所述NSCollectionView的keyDown(附:)方法不及格的关键事件了响应链。 在它的一个处理这样的事件是你应该首先将其覆盖在集合视图,并通过调用self.nextResponder手动发送事件超级意见.keyDown(附:事件)吗?你想自己来处理此类事件。



文章来源: - (void) keyDown: (NSEvent *) event does not work
标签: cocoa keydown