在我的Mac应用程序中,我会听取按键事件并将其传递给内部客户端,具体取决于修饰符和键码。
目前,我正面临这个问题,我无法控制" Ctrl + Tab"事件。似乎" App"本身试图处理这个问题,这对基于选项卡的应用程序很有意义。所以我禁用了Tabbingmode,但仍然,Ctrl + Tab永远不会触发KeyDown事件。关键代码和修饰符的任何其他组合似乎都可以通过。
有关如何为Ctrl + Tab触发按键事件的任何建议吗?
答案 0 :(得分:1)
在我的测试中,NSView
的{{1}}方法似乎没有在-keyDown:
子类上调用控制选项卡键事件。但是,您可以在应用程序级别使用NSView
子类拦截它们:
NSApplication
答案 1 :(得分:0)
使用
override func viewDidLoad() {
super.viewDidLoad()
NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
if self.myKeyDown(with: $0) {
return nil
} else {
return $0
}
}
}
和
func myKeyDown(with event: NSEvent) -> Bool {
// handle keyDown only if current window has focus, i.e. is keyWindow
guard let locWindow = self.view.window,
NSApplication.shared.keyWindow === locWindow else {
return false
}
switch event.specialKey {
case NSEvent.SpecialKey.tab:
// your event for tab action
return true
default:
break
}
return false
}
如果您需要快捷键
func myKeyDown(with event: NSEvent) -> Bool {
// handle keyDown only if current window has focus, i.e. is keyWindow
guard let locWindow = self.view.window,
NSApplication.shared.keyWindow === locWindow else {
return false
}
switch event.specialKey {
case NSEvent.SpecialKey.tab:
// your code for tab action
return true
default:
break
}
switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
case [.command]:
switch event.charactersIgnoringModifiers! {
case "w":
// your code for cmd+w action (example)
break
default:
break
}
}
return false
}