如何在NSTableView中选择一个NSCell?

bas*_*ibe 1 cocoa objective-c nstableview nstableviewcell

我有一个NSTableView带复选框的小号.每当未选中复选框时,我希望其中一个相邻的NSCells变灰并且无法访问.

但是,我无法弄清楚如何只处理一个特定的细胞.-dataCellForRowNSTableColumn总是改变整个表列的样板单元.

我如何访问一个单个单元格?

编辑:我使用NSTableViewDataSource协议填写表格视图.

Rob*_*ger 8

你不"访问一个单元格".NSTableView仅在必要时请求数据,您不填充它或直接控制它.

而是创建一个控制器对象来实现NSTableViewDatasource和可选的NSTableViewDelegate协议.然后,表视图将数据源消息发送到控制器,控制器会提供相应的数据.

您可以通过实现?tableView:setObjectValue:forTableColumn:row:数据源方法来允许编辑表视图中显示的对象.当用户单击复选框时,将在您的控制器对象上调用此方法.您的控制器有责任适当更新模型.

更新模型后,控制器应告知表视图重新加载.然后,表视图将询问控制器是否需要使用?tableView:objectValueForTableColumn:row:数据源方法显示的任何单元格的值.这将包括您需要禁用的单元格.您的控制器需要为单元提供适当的值.

如果需要更多控制单元格,可以实现 ?tableView:willDisplayCell:forTableColumn:row:委托方法.在显示单元格之前调用此方法,您可以适当地修改单元格.

有关使用数据源的更多信息,请参阅文档.

另一个选项(而不是使用数据源)是使用Cocoa Bindings和NSArrayController绑定到模型对象集合的.在这种情况下,您可以将Enabled表列的绑定绑定到控制单元的启用状态的模型对象的某个属性.您有责任确保该财产的状态是正确的.

如果需要使属性依赖于另一个属性的值,则可以使用Key-Value Observing文档中概述的依赖键机制.