当只调用setObjectValue:nil时,为什么NSPopUpButtonCell正确显示?

时间:2012-02-22 16:09:46

标签: objective-c cocoa nspopupbuttoncell

NSTableView具有倍数NSCell s(间接通过NSTableColumn)。 NSCell遵循Flyweight设计模式;他们是曲奇饼干。每列有一个单元格,并要求每行绘制一个单元格。 “这是一个值,在第一行绘制;这是第二行的值,等等。”这与基于视图的表视图形成对比,每个单元都有一个视图实例。

我已经将NSPopUpButtonCell子类化,并且对于每个setXxxValue:方法,我调用NSLog();并将消息转发给超类。被调用的唯一方法(例如,在添加新行或以其他方式刷新表时)是setObjectValue:。这是documentation所期望的......但null是唯一传递给它的东西!!它应该传递一个带有所选项索引的NSNumber。

我的表格很好。我只是想了解这个,因为我想扩展/改变单元格的行为(显然我不需要子类)。< / p>

问题:这怎么可能?如何将NSPopUpButtonCell设置为一个值,以便为每一行绘制正确的值。即使考虑绑定,它的NSTableColumn做了繁重的工作,不是吗?我错过了什么?

1 个答案:

答案 0 :(得分:0)

“表格中的每一行都共享相同的弹出菜单” - 不一定是这种情况。

除了设置表列的值绑定外,还可以通过阵列控制器将单元格的内容绑定设置为模型对象的数组属性。

您可以保留确定模型中选项的代码(只需创建一个字符串数组)。这样你就不需要自定义子类了。