objective-c - 在 NSWindow 中捕获关键事件

标签 objective-c xcode webkit nswindow

我正在尝试获得一个非常基本的网络浏览器,其中包含 3 个 Web View (2 个隐藏,1 个始终可见)。

我想通过按 CMD+1、CMD+2、CMD+3 在这 3 个网页 View 之间切换。

我创建了一个基本的 Cocoa 应用程序,在其中添加了 3 个 Web View ,引用了 Webkit 框架,我已经启动并运行它,这部分工作正常。

现在我想知道:

1) 如何捕获关键事件? 看起来太复杂了,浏览事件结构文档让我很头疼。

[咆哮]从做过很多 Windows 窗体、GTK、QT 和 Java/C#/C++ 工作的人看来,XCode 似乎在每个版本都变得更糟,因为它移动了所有东西并创建了 3 种不同的方法来实现同样的事情,等等.每次要用的时候就好像什么都要学一遍一样[/rant]

2)如何具体捕捉CMD+NUMBERS?

这仅适用于我正在构建的与 JIRA(项目管理)结合使用的快速生产力应用程序。

如果有人能指出我正确的方向,我将不胜感激。

每次我偶然发现一个好的教程,它已经过时或者是针对 iOS 开发人员的,大多数时候不再使用与 OS X 相同的 API。

对咆哮感到抱歉,感谢您的帮助!

最佳答案

您要覆盖的是 NSResponder method "keyDown:" ,我建议做的是子类化“WebView”并创建您自己的“keyDown”方法(确保调用“[super keyDown: theEvent]"不过在您的实现中的某处)。

现在,在您的“keyDown”实现中,要查找command 键,“NSEvent”对象会响应"modifierFlags" method。其中一个标志是“NSCommandKeyMask”。

例如:

NSUInteger flags = [theEvent modifierFlags];
if( flags == NSCommandKeyMask ){
    // Got it!
}

关于objective-c - 在 NSWindow 中捕获关键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16764798/

相关文章:

ios - [CFNumber 保留] : message sent to deallocated instance

ios - 如何使用 NEHotspotHelper(IOS,objective-c)获取可用的 WiFi 列表

ios - 添加 subview Controller 并更改其标签

css - webkit浏览器显示问题

c# - 在 C# 和 JavaScript 之间传递元素

javascript - iOS 设备上的日期返回 NaN

objective-c - Objective-C 中的对象是否曾经在堆栈上创建过?

objective-c - 在 xcode/objective-c 中的项目之间共享类

Swift,字典解析错误

ios - 将表函数移动到另一个函数后,定义与先前的值冲突