我从File-> New创建了NSWindowController的子类,并选中了“With XIB for user interface”选项。所以我创建了3个新文件。然后我使用Interface Builder将一个视图添加到窗口中。
将此代码放在MyWindowController.m中:
- (void)keyDown:(NSEvent *)theEvent{
NSLog(@"%@", theEvent);
}
在两个测试中,窗口都正确显示。但差异是:
我将NSButton更改为其他视图类型,以及我的自定义视图,所有操作都像第一种情况一样。
我的气氛是:
答案 0 :(得分:7)
请参阅NSResponder
cancelOperation:
文档:https://developer.apple.com/library/mac/ipad/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/Reference/Reference.html
此方法绑定到Escape和Command-。 (期间)钥匙。该 键窗口首先在视图层次结构中搜索其键的视图 相当于Escape或Command-。,无论输入哪个。如果没有 这些视图处理密钥等价物,窗口发送默认值 cancelOperation的动作消息:给第一响应者和来自 消息在响应者链中传播。如果没有响应者 响应者链实现了cancelOperation:,即关键窗口 在视图层次结构中搜索等效键为Escape的视图 (请注意,如果原始密钥等效,则可能是多余的 逃逸)。如果没有找到这样的响应者,则取消:动作消息 被发送到执行的响应者链中的第一个响应者 它
如果您想在NSWindowController
子类中处理Esc键,只需在其中定义cancel:
方法。
答案 1 :(得分:0)
好吧,我使用事件监视器捕获ESC按键,详见此处:http://www.ideawu.com/blog/post/54.html
但仍然没有得到WevView测试。
答案 2 :(得分:0)
我建议告诉窗口让第一响应者感兴趣的视图以便捕获关键事件
[[self window]makeFirstResponder:_viewControllerOfInterest];