NSTableView获取具有单元格的indexPath

时间:2017-01-21 13:54:50

标签: swift xcode nstableview

使用UITableView,使用

基于单元格找到indexPath非常容易
tableView.indexPath(for: cell)

但是在MacOS上,遗憾的是这种方法并不存在。
我的用例如下:
我在Cell View中有一个按钮,点击后我会调用委派的ViewController来执行操作。现在我有了单元格的实例,我想要获得的是NSTableView中的行(位置)。我怎样才能获得它?

2 个答案:

答案 0 :(得分:5)

在macOS中使用基于视图的表格视图,为按钮创建标准IBAction并获取row(for view:

func row(for view: NSView) -> Int
     

返回指定视图的行的索引。

基于视图的表格视图更加通用,更易于处理。

答案 1 :(得分:0)

要在@vadian的答案中添加特定案例:

我的情况与@ rdid4相同,但是有多个tableViews。我输入了这个:

func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {

   switch  (tableView){

   let cellView = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("projectCell1"), owner: self) as? ProjectCell

   if (tableColumn?.identifier)!.rawValue == "projectColumn1" {
      let cellView = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("projectCell1"), owner: self) as? ProjectCell

cellView有一个嵌入式NSButton

 cellView?.statusButton.action = #selector(projectStatusChanged(sender:))
 cellView?.statusButton.tag = 1

单元格标签显示了我需要处理的NSTableView(项目中有两个)。

然后进入

@objc func projectStatusChanged(sender: NSButton) {


        switch  (sender.tag){

        case 1:
             projectRowIndex = projectTable1.row(for: sender)
           ....

        case 2:
             projectRowIndex = projectTable2.row(for: sender)

default...

我希望这对其他人有帮助。