OS X应用程序中的NSTableView选择

时间:2016-02-21 01:24:33

标签: xcode cocoa nstableview

所以我试图学习如何创建一个简单的OS X应用程序并且我有点困惑。

我得到了这个表视图 - 将它连接到阵列控制器等已经很奇怪。

它工作正常 - 暂时,但我想在用户点击特定行时触发特定操作。

我在stackoverflow上找到了关于shouldSelectRow方法,但似乎没有正常工作。

func tableView(tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
        switch tableView.identifier! {
        case "SetsTable":
            print("Selected row:", row)
            print("Objects after selection:", self.arrayController.selectedObjects)
            self.appsTableView.reloadData()
            return true
        default:
            return true
        }
    }

它在第一个print语句中显示正确的行,但是当它到达第二个时,它似乎从完全不同的行中选择对象(如果我只有一行包含对象,则它显示一个空数组)

有谁知道这里的问题是什么以及如何正确显示所选行的对象?

这不是问题选择吗?

当我在此函数外使用self.arrayController.selectedObjects时(例如,选择了行并点击了一个调用打印出selectedObjects的按钮),它会正确显示。

1 个答案:

答案 0 :(得分:1)

在名称中带有'should'的方法在它发生之前被调用,之后调用带有'did'的方法。

在选择更改之前调用

tableView:shouldSelectRow:,以便委托可以拒绝新选择。

选择更改后调用

tableViewSelectionDidChange:arrayController.selectedObjects将成为新选择。

如果您想了解更多信息:Table View Programming Guide