从表子类访问NSTableView数据源

时间:2019-07-23 05:26:36

标签: nstableview appkit nsmenu

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动作,但是我希望这种方法可以工作。

1 个答案:

答案 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
  }
  //...
}
相关问题