使用NSTableViewDataSource填充NSPopUpButtonCell的正确方法

时间:2011-11-09 15:45:16

标签: objective-c nspopupbuttoncell

让我们说一个人有很多车,他们有一个最喜欢的车。我似乎无法在文档中找到它描述在tableview中填充NSPopUpButtonCell的正确方法,每行的方式不同。

例如,我会为每个人拥有1行,Favorite Car列中会有一个NSPopUpButtonCell。每行都有不同的菜单项。第1排(Camaro,Cavalier,F150)第2排(745li,Camaro,Town Car)等......

1 个答案:

答案 0 :(得分:1)

来自NSTableColumn.h文件

  

允许每行自定义用于此NSTableColumn的单元格。在绘制'row'时,NSTableView将调用 - [tableColumn dataCellForRow:]。默认情况下,这只是调用-dataCell。子类可以覆盖-dataCellForRow:如果他们需要为不同的行使用不同的单元格。在Leopard和更高版本上,NSTableView委托方法-tableView:dataCellForTableColumn:row:可以用来作为一种方便,以避免子类化NSTableColumn。在这两种情况下,返回的单元格都应该正确实现-copyWithZone :,因为NSTableView可以复制单元格。

该表将在弹出单元格中询问数据源中的selectedIndex,然后它会向代表询问菜单项。我有我的委托和datasource相同的对象,让我们称之为tableViewController。

当tableViewController在objectValueForTableColumn:(datasource方法)中提供selectedIndex时,菜单中没有所有菜单时间,所以我必须调用dataCellForRow来获取菜单和所选项的索引在菜单中。
tableViewController实现了dataCellForRow:它创建了一个新的NSPopUpButtonCell并用菜单项填充它。

它有效,但似乎很复杂。