我试图将编辑单元格文本功能添加到基于视图的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
方法,但是遇到了同样的问题。
答案 0 :(得分:1)
最有效的方法是可可绑定。将文本字段的value
绑定到objectValue.name
的相应键路径(Cell View
)。
没有多余的代码。所有绑定的属性都与UI元素同步。