22

出于某种原因,NSTextField 不允许我使用 将任何内容粘贴到其中Command+V,但如果我右键单击并单击“粘贴”,我可以粘贴到其中。为什么会发生这种情况,我该如何解决?

4

4 回答 4

9

我通过将 NSMenu 主菜单中的“粘贴”按钮链接到第一响应者的paste:命令来修复它。

于 2010-01-14T06:58:12.677 回答
4

当您从应用程序的主菜单中选择“编辑 > 粘贴”时会发生什么?

于 2010-01-13T07:57:33.823 回答
4

你是否:

  • 分配一个等效于在主菜单之前响应的任何控件(NSButtons、NSMenuItems、...)的键

- 或者 -

  • 删除整个菜单
  • 编辑 NSMenuItem
  • Paste NSMenuItem “Paste”快捷方式与“Paste”NSMenuItem 等效
于 2010-01-13T08:37:42.440 回答
2

感谢这个 使复制和粘贴工作与 NSTextField

final class EditableNSTextField: NSTextField {

private let commandKey = NSEvent.ModifierFlags.command.rawValue
private let commandShiftKey = NSEvent.ModifierFlags.command.rawValue | NSEvent.ModifierFlags.shift.rawValue

override func performKeyEquivalent(with event: NSEvent) -> Bool {
    if event.type == NSEvent.EventType.keyDown {
        if (event.modifierFlags.rawValue & NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue) == commandKey {
            switch event.charactersIgnoringModifiers! {
            case "x":
                if NSApp.sendAction(#selector(NSText.cut(_:)), to: nil, from: self) { return true }
            case "c":
                if NSApp.sendAction(#selector(NSText.copy(_:)), to: nil, from: self) { return true }
            case "v":
                if NSApp.sendAction(#selector(NSText.paste(_:)), to: nil, from: self) { return true }
            case "z":
                if NSApp.sendAction(Selector(("undo:")), to: nil, from: self) { return true }
            case "a":
                if NSApp.sendAction(#selector(NSResponder.selectAll(_:)), to: nil, from: self) { return true }
            default:
                break
            }
        } else if (event.modifierFlags.rawValue & NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue) == commandShiftKey {
            if event.charactersIgnoringModifiers == "Z" {
                if NSApp.sendAction(Selector(("redo:")), to: nil, from: self) { return true }
            }
        }
    }
    return super.performKeyEquivalent(with: event)
}

}

于 2020-11-23T09:39:58.523 回答