gpt4 book ai didi

cocoa - 在基于 NSDocument 的应用程序中拦截 Cmd-Key 的最佳位置

转载 作者:行者123 更新时间:2023-12-03 17:02:56 25 4
gpt4 key购买 nike

在基于 NSDocument 的应用程序中拦截 CmdAnyKey 键事件的最合适位置是什么?

目的是切换到事件窗口中的某个组件 - 有点像 Firefox 允许您切换选项卡 - 无需在菜单命令上有匹配的快捷方式来执行该任务。

即理想情况下,框架应该进行正常处理,包括处理菜单命令,并且在所有其他响应程序无法响应该特定快捷方式之后,它应该被路由到自定义方法。

我搜索了 NSDocumentNSAppDelegateNSWindowController,但找不到任何适当的机制来 Hook 以接收这些命令在窗口级别。

因此,缺乏任何现有的自定义机制,在自定义 NSWindowController 中重写 keyDown: 看起来是实现所需效果的最合适方法吗?

最佳答案

是的,如果您需要在响应者链上的所有内容都拒绝处理键盘事件后获取键盘事件,则可以通过子类化 NSWindow 来实现此目的。

以下是我在一个项目中的做法:

- (void)keyDown:(NSEvent*)event
{
SEL keyDownBool = @selector(keyDownBool:);

if ([[self delegate] respondsToSelector:keyDownBool]
&& [[self delegate] performSelector:keyDownBool withObject:event])
{
return;
}

[super keyDown:event];
}

我的定制keyDownBool:如果委托(delegate)方法处理特定的按键事件,则返回 YES。否则此方法将按键事件向下传递到 super .

现在我正在使用+ (id)addLocalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(NSEvent* (^)(NSEvent*))block而不是子类化。不同之处在于,它在事件被分派(dispatch)之前处理(并且可以选择丢弃)事件。

关于cocoa - 在基于 NSDocument 的应用程序中拦截 Cmd-Key 的最佳位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23323757/

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