gpt4 book ai didi

copy - 如何从 NSTableView 复制行

转载 作者:行者123 更新时间:2023-12-02 05:13:04 24 4
gpt4 key购买 nike

我有一个 NSTableView,它只显示一排数字。我只想使用 (cmd+copy) 或右键单击复制来复制这些数字。如何在 NSTableViews 中实现此功能。

最佳答案

这就是我让它工作的方式,它的行为与响应者链的预期一致(仅在 NSTableView 本身成为第一响应者时调用,而不是在编辑表格单元格等时调用)。
这是一个两部分的解决方案:
第1部分
添加 copy(_:)paste(_:) NSTableView 的方法子类允许在用户触发 Edit→Copy 或 Edit→Paste 菜单项时运行代码。响应者链将这些识别为选择器方法。
第2部分
符合NSTableView子类到 NSMenuItemValidation所以我们可以验证是否应该为用户启用这些复制或粘贴菜单项。 (在这种情况下这不是自动的,因此我们必须自己编写该逻辑)。
如何
首先,在您的主菜单( Storyboard)中,找到编辑菜单并打开属性检查器。然后:

  • 将复制标识符设置为“menuEditCopy”
  • 将粘贴标识符设置为“menuEditPaste”

  • 然后,可以将此扩展用作模板,基于 NSTableView名为 MyGreatTableView 的子类.
    class MyGreatTableView: NSTableView {
    ...
    }

    extension MyGreatTableView: NSMenuItemValidation {

    override var acceptsFirstResponder: Bool { true }

    @IBAction func copy(_ sender: AnyObject?) {
    // add your logic to copy the selected rows to the clipboard
    }

    @IBAction func paste(_ sender: AnyObject?) {
    // add your logic to paste rows from the clipboard
    }

    func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
    switch menuItem.identifier {
    case NSUserInterfaceItemIdentifier("menuEditCopy"):
    // enable Copy if at least one row is selected

    return numberOfSelectedRows > 0

    case NSUserInterfaceItemIdentifier("menuEditPaste"):
    // enable Paste if clipboard contains data that is pasteable

    // ...
    // (add your logic to read the clipboard
    // and conditionally enable Paste here)
    // ...

    default:
    return false

    }
    }

    }

    关于copy - 如何从 NSTableView 复制行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3733209/

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