Swift 5,Xcode 11 beta
我正在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
并使用IBAction
来连接Archive
动作,但是我希望这种方法可以工作。
答案 0 :(得分:0)
我终于明白了。如果我引用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
}
//...
}