“新建”创建 NSWindowController 的子类,并选中“使用 XIB 用于用户界面”选项。所以我创建了 3 个新文件。然后我使用 Interface Builder 将-6ren">
gpt4 book ai didi

cocoa - 如果没有将 WebView 添加到窗口,NSWindowController 无法捕获 ESC

转载 作者:行者123 更新时间:2023-12-03 16:13:11 24 4
gpt4 key购买 nike

我从"file"->“新建”创建 NSWindowController 的子类,并选中“使用 XIB 用于用户界面”选项。所以我创建了 3 个新文件。然后我使用 Interface Builder 将一个 View 添加到窗口中。

并在 MyWindowController.m 中包含此代码:

- (void)keyDown:(NSEvent *)theEvent{
NSLog(@"%@", theEvent);
}
  1. 第一次测试,添加一个 NSButton,然后运行项目。
  2. 第二次测试,添加一个WebView(NSButton删除),然后运行项目。

在这两个测试中,窗口都正确显示。但区别在于:

  1. (NSButton)当我按下“a”、“b”等键时可以看到日志输出,但按 ESC 键则看不到
  2. (WebView)当我按下“a”、“b”、...、以及 ESC 键等键时,我可以看到日志输出

我将 NSButton 更改为其他 View 类型,还有我的自定义 View ,所有这些都像第一种情况一样。

我的问题是:

  1. 为什么 NSWindowController 在第一种情况下无法捕获 ESC 键按下的情况?
  2. 为什么 NSWindowController 会以 WebView 作为第一响应者来捕获 ESC 键按下的情况。
  3. NSWindowController 如何在没有 WebView 的情况下捕获 ESC 键?

最佳答案

参见NSResponder cancelOperation:文档:https://developer.apple.com/library/mac/ipad/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/Reference/Reference.html

This method is bound to the Escape and Command-. (period) keys. The key window first searches the view hierarchy for a view whose key equivalent is Escape or Command-., whichever was entered. If none of these views handles the key equivalent, the window sends a default action message of cancelOperation: to the first responder and from there the message travels up the responder chain. If no responder in the responder chain implements cancelOperation:, the key window searches the view hierarchy for a view whose key equivalent is Escape (note that this may be redundant if the original key equivalent was Escape). If no such responder is found, then a cancel: action message is sent to the first responder in the responder chain that implements it.

如果您想在 NSWindowController 子类中处理 Esc 键,只需在其中定义一个 cancel: 方法即可。

关于cocoa - 如果没有将 WebView 添加到窗口,NSWindowController 无法捕获 ESC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15833669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com