Swift中基于视图的表绑定

时间:2014-08-06 19:55:30

标签: swift nstableview cocoa-bindings nsarraycontroller

我试图使用绑定在Swift中设置基于视图的表。我见过的所有示例都使用数据源/委托设置。

我有一个Flag对象数组,它有两个属性 - flagName:String和flagImage:NSImage。我有一个管理这个数组的NSArrayController。

如果我设置一个基于单元格的表,并将一列绑定到arrangeObjects.flagImage,另一列绑定到arrangeObjects.flagName,我会得到一个显示图像和名称的表,我可以使用数组控制器添加并删除方法,因此我的数据源或我的数组控制器没有问题。

我一直按照Apple's TableView Programming Guide中的说明将基于视图的表绑定到我的数组控制器:

  • tableView内容绑定:FlagController.arrangedObjects
  • textField值绑定:TableCellView.objectValue.flagName
  • imageView值绑定:TableCellView.objectValue.flagImage

(IBs自动完成不满意objectValue.flagName的路径分别为flagImage;它并不觉得应该有任何完成并说它无法解析路径,所以它看起来好像问题出在tableView的内容上。)

如果我这样做,我的表有许多行,这些行对应于我的阵列控制器当时正在管理的元素数量(我有两个简单的设置,一个对象与50个对象,所以它'很清楚,某事受到约束)。我不能得到的是一个展示;并选择一个表行似乎没有发回消息到我的flagController。

我错过了什么?有没有人能够做到这一点?到目前为止,我对Swift中的其他绑定没有任何问题,但我开始认为数据源示例的突然再现与此无关。

1 个答案:

答案 0 :(得分:2)

听起来你没有实现委托方法-tableView:viewForTableColumn:row:。这是空白表的常见原因。

如果确保表列的标识符和表格单元格视图的标识符在IB中相同,则实际上不必实现它。

否则,该方法可以执行此操作:

- (NSView*) tableView:(NSTableView*)tableView viewForTableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row
{
    return [tableView makeViewWithIdentifier:@"TheIdentifierOfYourTableCellView" owner:self];
}

(如果需要,也可以做更多。)