Pri*_*Raj 5 copy rows nstableview
我有一个 NSTableView,它只显示一行数字。我只想使用(cmd+copy)或右键单击复制来复制这些数字。如何在 NSTableViews 中实现此功能。
这就是我让它工作的方式,并且它的行为与响应者链的预期一致(仅当 NSTableView 本身成为第一响应者时才调用它,而不是在编辑表格单元格等时调用)。
\n这是一个由两部分组成的解决方案:
\n添加copy(_:)和paste(_:)方法NSTableView方法,可以在用户触发 Edit\xe2\x86\x92Copy 或 Edit\xe2\x86\x92Paste 菜单项时运行代码。响应者链将这些识别为选择器方法。
NSTableView使子类符合NSMenuItemValidation符合,以便我们可以验证是否应该为用户启用这些复制或粘贴菜单项。(在这种情况下这不是自动的,因此我们必须自己编写该逻辑)。
首先,在主菜单(故事板)中,找到“编辑”菜单并打开“属性检查器”。然后:
\n然后,这个扩展可以用作模板,基于一个NSTableView名为MyGreatTableView模板。
class MyGreatTableView: NSTableView {\n ...\n}\n\nextension MyGreatTableView: NSMenuItemValidation {\n \n override var acceptsFirstResponder: Bool { true }\n \n @IBAction func copy(_ sender: AnyObject?) {\n // add your logic to copy the selected rows to the clipboard\n }\n \n @IBAction func paste(_ sender: AnyObject?) {\n // add your logic to paste rows from the clipboard\n }\n \n func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {\n switch menuItem.identifier {\n case NSUserInterfaceItemIdentifier("menuEditCopy"):\n // enable Copy if at least one row is selected\n\n return numberOfSelectedRows > 0\n \n case NSUserInterfaceItemIdentifier("menuEditPaste"):\n // enable Paste if clipboard contains data that is pasteable\n \n // ... \n // (add your logic to read the clipboard\n // and conditionally enable Paste here)\n // ...\n \n default:\n return false\n \n }\n }\n \n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
904 次 |
| 最近记录: |