【问题标题】:View-based table bindings in SwiftSwift 中基于视图的表绑定
【发布时间】:2014-08-06 19:55:29
【问题描述】:

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

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

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

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

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

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

如果我这样做,我的表有许多行,这些行对应于我的数组控制器当时管理的元素数量(我有两个简单的设置,一个对象与 50 个对象,所以很明显 something 被绑定)。我没有得到的是显示器;并且选择表格行似乎不会向我的 flagController 发送回消息。

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

【问题讨论】:

    标签: swift nstableview cocoa-bindings nsarraycontroller


    【解决方案1】:

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

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

    否则,该方法只能这样做:

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

    (如果需要,它还可以做得更多。)

    【讨论】:

    • 基于视图的表是否需要委托方法?我的理解是,您可以完全使用绑定来设置它们,就像您可以使用基于单元格的表格一样;这听起来好像会融合这两种方法。
    • 我在第二段中提到,委托方法没有必要实现,但绑定与它无关。您必须为表格视图提供一种查找表格单元格视图的方法。这可以通过委托方法或通过使表格单元格视图具有与表格列相同的标识符来完成。这可以在 IB 中设置,也可以通过调用 -[NSTableView registerNib:forIdentifier:] 来完成。
    • 感谢您的耐心等待;由于某种原因,我第一次未能解析它:-(出于兴趣 - 我怎么会发现这个?我再次查看了文档,发现没有提到这一点。
    • 不幸的是,它有点分散。其中一些在各种与表视图相关的类引用中。其中一些在 AppKit 发行说明中,涵盖了自 10.7 以来的版本,当时引入了基于视图的表格。其中一些在 NSTableView.h 头文件中。
    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多