1

我想为用户选择的一行(或多行)向我的 NSTableView 添加复制(Command + C)功能。根据我阅读的内容,如果您在 TableView Controller Delegate中实现复制,菜单项中的复制功能应该会自动激活。

我尝试在 NSTableViewController (是表视图的委托和数据源)中添加以下内容,但没有成功,复制菜单项仍然显示为灰色:

  1. override func copy() -> AnyObject { print("TEST: copytriggered") /在这里我将复制到剪贴板选定的行/ 返回 true }

2.符合NSCopying,实现copyWithZone...

3. 在窗口控制器和应用委托中尝试 1 和 2。

  1. 添加 func tableView(_ tableView: NSTableView, pasteboardWriterForRow row: Int) -> NSPasteboardWriting? 在 TableView 数据源中。

我现在不知道该怎么做,任何帮助表示赞赏。

谢谢,

马克

4

1 回答 1

0

刚刚得到答案,在这里发布以供将来参考。

您将复制编辑操作方法与复制对象的方法混淆了。NSCopying 协议和 copyWithZone() 方法用于后者,使对象能够创建自身的副本。同样,copy() 方法只是 copyWithZone() 的一种方便的覆盖方法。

复制编辑菜单项的操作方法略有不同。它是“func copy(_ sender: AnyObject?)”。这是所有动作方法的一般形式,接受一个发送者参数而不返回任何东西。您需要实现该方法。

最后,tableView(_:pasteboardWriterForRow:) 一般只用于拖放,当用户拖动一行时。

于 2016-08-02T16:40:55.397 回答