gpt4 book ai didi

没有编辑菜单的对话框中的 Cocoa 键盘快捷键

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

我有一个显示菜单栏状态项的 LSUIElement 应用程序。应用程序可以显示一个包含文本字段的对话框窗口。

如果用户右键单击/按住 Control 键单击文本字段,则会出现一个菜单,允许剪切、复制、粘贴等。但是,标准 Command-X、Command-C 和 Command-V 键盘快捷键不支持在该领域工作。我认为这是因为我的应用程序没有提供定义了这些快捷方式的编辑菜单。

我已经尝试将“编辑”菜单项添加到我的应用程序菜单中,如 Ship Some Code 中的建议。博客,但这没有用。可以使用“编辑”菜单中的菜单项,但键盘快捷键仍然不起作用。

我可以想象几种方法来破解键盘处理,但是有没有“推荐”的方法来实现这一点?

(有关该应用程序的详细信息,请参阅 Menubar Countdown。)

相关问题:Copy/Paste Not Working in Modal Window

最佳答案

改进 CocoaRocket 解决方案:

以下内容无需子类化 NSTextField 并记住在整个应用程序中使用子类;它还将为处理它们的其他响应者启用复制、粘贴和好友功能,例如。 NSTextView。

将其放入 NSApplication 的子类中,并相应地更改 Info.plist 中的主类。

- (void) sendEvent:(NSEvent *)event {
if ([event type] == NSKeyDown) {
if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) == NSCommandKeyMask) {
if ([[event charactersIgnoringModifiers] isEqualToString:@"x"]) {
if ([self sendAction:@selector(cut:) to:nil from:self])
return;
}
else if ([[event charactersIgnoringModifiers] isEqualToString:@"c"]) {
if ([self sendAction:@selector(copy:) to:nil from:self])
return;
}
else if ([[event charactersIgnoringModifiers] isEqualToString:@"v"]) {
if ([self sendAction:@selector(paste:) to:nil from:self])
return;
}
else if ([[event charactersIgnoringModifiers] isEqualToString:@"z"]) {
if ([self sendAction:@selector(undo:) to:nil from:self])
return;
}
else if ([[event charactersIgnoringModifiers] isEqualToString:@"a"]) {
if ([self sendAction:@selector(selectAll:) to:nil from:self])
return;
}
}
else if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) == (NSCommandKeyMask | NSShiftKeyMask)) {
if ([[event charactersIgnoringModifiers] isEqualToString:@"Z"]) {
if ([self sendAction:@selector(redo:) to:nil from:self])
return;
}
}
}
[super sendEvent:event];
}

// Blank Selectors to silence Xcode warnings: 'Undeclared selector undo:/redo:'
- (IBAction)undo:(id)sender {}
- (IBAction)redo:(id)sender {}

关于没有编辑菜单的对话框中的 Cocoa 键盘快捷键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/970707/

24 4 0