nstableview - 从表子类访问 NSTableView 数据源
问题描述
Swift 5、Xcode 11 测试版
我正在一个NSTableView
子类上设置一个上下文菜单,以便当用户控制单击表中的一堆行时,我将能够对它们采取行动(比如归档它们)。
我可以让菜单工作,但我不明白如何访问在NSTableView
的父视图控制器中定义的数据源。
这是我到目前为止所尝试的:
class ListTable: NSTableView{
override func validateProposedFirstResponder(_ responder: NSResponder, for event: NSEvent?) -> Bool {
return true
}
override func menu(for event: NSEvent) -> NSMenu? {
let menu = NSMenu()
menu.addItem(withTitle: "Archive", action: #selector(archiveTheseEntries), keyEquivalent: "")
return menu
}
@objc func archiveTheseEntries(){
print(self.selectedRowIndexes) <-- This works
for row in self.selectedRowIndexes{
//How do I get access to my datasource? This doesn't seem to work...
//let entry = self.dataSource?.tableView?(self, objectValueFor: self.tableColumns[0], row: row)
}
}
}
我知道我可以NSMenu
在情节提要中设置并使用 anIBAction
来连接Archive
动作,但我希望让这种方法发挥作用。
解决方案
我终于弄明白了。如果我引用self.dataSource.self
然后我发现它指向定义我的数据源的视图控制器。
@objc func archiveTheseEntries(){
guard let entryVC = self.dataSource as? EntryVC else{ return }
var entries = [Entry]()
for row in self.selectedRowIndexes{
entries.append(entryVC.entries[row]) <-- entryVC.entries contains my table data
}
//...
}
推荐阅读
- performance - 如何阅读 Chrome DevTools 中的网络选项卡 - 加载时间
- python - Python:模拟写入文件对象而不创建文件
- excel - 自动搜索 CAGE 代码
- google-kubernetes-engine - 是否可以只有一个入口将流量路由到 GKE 上不同命名空间上的不同服务?
- r - 有没有办法根据股票在用户定义的时期内的回报来创建列?
- typescript - 打字稿检测类型
- python - tensor2tensor/avg_checkpoints 脚本是否错误
- postgresql - Flask-Migrate 脚本未对 Postgres 数据库应用更改
- javascript - 如何从javascript中的对象列表中找到字符串的某些部分与对象的字符串值的最完美匹配?
- python - 在 Python 中使用 pymunk 和 pygame 实现内置 GUI?