如何使用绑定在表视图中显示按钮单元格(复选框)标题

时间:2011-11-10 16:40:14

标签: objective-c cocoa nstableview nsarraycontroller nsbuttoncell

我正在尝试一个简单的应用程序,其中有一个可变数组的可变数组,例如 -

NSMutableDictionary *sample6 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"title6",@"title",[NSNumber numberWithBool:NO],@"state", nil];

在IB中,我创建了一个带有NSButtonCell的表视图(复选框)。

我能够使用以下表格列绑定显示复选框状态(已选中或未选中):

Value - ArrayController.arrangedObjects.state

在这种情况下,它会显示一个带有标题的复选框数组 - “检查”,如下面的屏幕截图所示:

enter image description here

  

现在我的目标是使用绑定显示复选框标题,以便它   从相同的可变字典中获取值   状态。

我尝试了按钮单元格的绑定,但它不起作用:

  

标题 - > ArrayController.selection.title

我也试过这个按钮单元的绑定:

  

标题 - > ArrayController.arrangedObjects.title

但它不起作用,使用上面的绑定后它看起来像这样:

enter image description here

任何人都可以建议我使用哪个控制器密钥,如果这不是显示标题的正确方法,那么这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:6)

不幸的是,如果你想这样做,你需要编写一些代码。将表列值绑定到数组时,表列正在处理原型数据单元格,设置其值,并为每行“标记”它。按钮单元格的绑定不会“通过”表格列显示,因此简单的绑定不会为您执行此操作。

回答您的问题

因此。由于只显示了值绑定,因此如果您确实希望复选框的标题反映该值,则必须手动设置标题(即,您确实希望复选框同时处理检查状态和显示标题)。为此,您必须将绑定与 < NSTableDelegateProtocol > 混合。每次询问时,使用-tableView:willDisplayCell:forTableColumn:row:方法将单元格的-title属性设置为数组控制器的-arrangedObjects数组中正确对象的属性。混合绑定和数据源/委托方法实际上比最基本的应用程序更常见,所以不要担心你做的事情很脏。注意:执行此操作后,您将无法支持编辑标题,因为它是一个复选框。

替代设计

就个人而言,我会避免所有这些,只为标题添加一个单独的表列。将新列的值绑定到阵列控制器的arrangedObjects.title并关闭复选框按钮单元格的标题,以便仅显示复选框本身。这大大简化了整个过程,并允许编辑标题。