下面是示例代码。
- (void) keyDown: (NSEvent *) event
{
NSString *chars = [event characters];
unichar character = [chars characterAtIndex: 0];
if (character == 27) {
NSLog (@"ESCAPE!");
}
}
我是否需要设置任何委托InterfaceBuilder下或任何还挺结合?
帮助表示赞赏...
keyDown
需要以被重写NSView
子类,其目的被设定为第一响应者。 响应链应该向下传递的事件,但可以肯定你得到它,请确保您的目标是第一个响应者。
在可可只意见参与响应链此事件。 所以,你应该重写一些观点方法。 最简单的方法是找出哪些观点是要处理的,并用它特定事件的第一个响应者。
窗口发送keyDown(with: )
挺直,其可以处理它或传递最多响应链第一响应。 并非所有的意见传递活动起来。 NSCollectionView没有通过关键事件。 它起着一个凸起的声音来代替。
这也有可能是要处理的关键是等价键 在这里阅读更多 。 如果是这样你应该重写performKeyEquivalent(有:)的方法来获得这种类型的事件,而不是。 这不像的keyDown事件事件从窗口向下传递到所有子视图,直到有人处理它们。
如前所述NSCollectionView的keyDown(附:)方法不及格的关键事件了响应链。 在它的一个处理这样的事件是你应该首先将其覆盖在集合视图,并通过调用self.nextResponder手动发送事件超级意见.keyDown(附:事件)吗?你想自己来处理此类事件。