如何允许粘贴(cmd + v)到NSTableView单元格?

时间:2018-01-29 11:36:31

标签: swift macos cocoa nstableview nscell

我已经通过快捷键cmd + C实现了复制tableView选择的单元格值。 现在我试图实现粘贴cmd + V. 当我单击tableView单元格时,它会被选中。再次点击,我正在编辑它。在编辑时,我按下cmd + V,没有任何反应。我可以写文字,但不能通过复制粘贴插入。

尝试通过“编辑”菜单手动实施 - >粘贴Cmd + V.

    @IBAction func onPaste(_ sender: Any) {
      let pasteBoard = NSPasteboard.general
      pasteBoard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)
      tableView.selectedCell().set??? = pasteBoard.string(forType: NSPasteboard.PasteboardType.string)
    }

但不知道如何在NSCell上设置值。

3 个答案:

答案 0 :(得分:0)

我的错误。我没有注意当我更改“编辑菜单”操作时,它会删除默认行为。 由于我更改了默认操作以调用我的自定义方法,因此:粘贴操作已从cmd + v快捷方式断开连接。

答案 1 :(得分:0)

我的应用程序也遇到了同样的问题,发现很容易解决。

始终可以使用鼠标上下文菜单将其复制并粘贴到NSTextField中。当具有编辑菜单时,使用带有cmd-c和cmd-v的键盘进行复制和粘贴将自动可用。

我添加了之前删除的编辑菜单项,复制粘贴立即可用。

答案 2 :(得分:-1)

要允许在TextField上粘贴,请通过扩展NSTextField创建自定义TextField类:

class EditingTextField: NSTextField {

  private let commandKey = NSEventModifierFlags.command.rawValue
  private let commandShiftKey = NSEventModifierFlags.command.rawValue | NSEventModifierFlags.shift.rawValue

  override func performKeyEquivalent(with event: NSEvent) -> Bool {
    if event.type == NSEventType.keyDown {
      if (event.modifierFlags.rawValue & NSEventModifierFlags.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 & NSEventModifierFlags.deviceIndependentFlagsMask.rawValue) == commandShiftKey {
        if event.charactersIgnoringModifiers == "Z" {
          if NSApp.sendAction(Selector(("redo:")), to:nil, from:self) { return true }
        }
      }
    }
    return super.performKeyEquivalent(with: event)
  }
}