作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 NSTableView,它只显示一排数字。我只想使用 (cmd+copy) 或右键单击复制来复制这些数字。如何在 NSTableViews 中实现此功能。
最佳答案
这就是我让它工作的方式,它的行为与响应者链的预期一致(仅在 NSTableView 本身成为第一响应者时调用,而不是在编辑表格单元格等时调用)。
这是一个两部分的解决方案:
第1部分
添加 copy(_:)
和 paste(_:)
NSTableView
的方法子类允许在用户触发 Edit→Copy 或 Edit→Paste 菜单项时运行代码。响应者链将这些识别为选择器方法。
第2部分
符合NSTableView
子类到 NSMenuItemValidation
所以我们可以验证是否应该为用户启用这些复制或粘贴菜单项。 (在这种情况下这不是自动的,因此我们必须自己编写该逻辑)。
如何
首先,在您的主菜单( Storyboard)中,找到编辑菜单并打开属性检查器。然后:
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/
我是一名优秀的程序员,十分优秀!