在NSTableView加载时调用controlTextDidEndEditing

时间:2018-07-29 19:12:46

标签: swift macos cocoa nstableview

我试图将编辑单元格文本功能添加到基于视图的NSTableView中。我有一个具有name属性的数据模型,并且我正在使用该类的数组作为myTableView的数据源。为了添加编辑功能,我已经实现了controlTextDidEndEditing这样的方法-

override func controlTextDidEndEditing(_ obj: Notification)
    {
        guard let newName = (obj.object as? NSTextField)?.stringValue else {
            return
        }

        //Added for debugging purpose
        print(myTableView.selectedRow)

        //Update text value of the array item at selectedRow
        project[myTableView.selectedRow].name = newName
    }

这里的问题是-运行我的应用程序并加载myTableView时,controlTextDidEndEditing被解雇。由于最初没有选择,因此print(myTableView.selectedRow)语句返回-1

当我尝试获取当前选定的单元格文本时,我得到了Cannot pass a negative value for 'index'这个异常,因为selectedRow最初是-1

为什么在NSTableView加载时调用此方法?在基于NSTableView的视图中具有编辑文本功能的最佳方法是什么?我想要实现的是一种在编辑连续结束时得到通知的方法,这样我就可以在后端更新对象。我也尝试了NSNotificationCenter.addObserver方法,但是遇到了同样的问题。

1 个答案:

答案 0 :(得分:1)

最有效的方法是可可绑定。将文本字段的value绑定到objectValue.name的相应键路径(Cell View)。

没有多余的代码。所有绑定的属性都与UI元素同步。