【问题标题】:Cocoa - View-Based NSTableView, using one cell in multiple tablesCocoa - 基于视图的 NSTableView,在多个表格中使用一个单元格
【发布时间】:2012-01-05 22:08:21
【问题描述】:

我有一个问题。 [我能找到的唯一例子是在 WWDC 2011 的一次演讲中展示的(“Maximizing Productivity in Xcode 4”),但没有可用的资源(它是一个名为 Birdathon 的应用程序)。我想出的所有其他东西都是针对 iOS 的,不会翻译。]

基本上,我有一些基于视图的 NSTableView,目前在我的 NSTableCellView 中直接在列中布置图像/文本字段。我有一个 NSTableCellView 的子类,它为我提供了为我在该单元格中使用的每个文本字段分配值的出口。 DataSource 和 Delegate 已实现并且工作正常 - 带有我的自定义 NSTableViewCell 的 TableView 工作正常。

我的问题是我想在多个不同的表格中使用同一个单元格。不必每次都重新创建相同的布局,我觉得我应该能够在 IB 中只绘制一次 NSTableCellView。 [- 实际上,我提到的 Birdathon 示例似乎显示 NSTableCellView 被布置在它自己的 NIB 中。]

我在很多地方都找到了 iOS 的答案,例如:How do you load custom UITableViewCells from Xib files?

谁能帮我在 Mac 上为 Cocoa 修改它?

谢谢,

大卫

【问题讨论】:

  • 确定是 NSTableView 而不是 UITableView?
  • 这就是我想说的,可能不是很清楚 - 我想在 Cocoa for Mac 中使用 NSTableView 执行此操作,但我能找到的唯一示例是 iOS(Cocoa Touch),因此使用 UITableView。链接到 UITableView 问题的原因是因为该解决方案是我需要的,但翻译成 NSTableView。
  • 对不起,我是愚蠢的。 Birdathon 示例 UITableView,这不是我想要的。那么下一个显而易见的问题是:是否有可能用 NSTableView / Cocoa 做我想做的事?
  • 您是否尝试将所有 NSTables 放在同一个 .xib 中,并在其中定义您的 NSCellView?然后,您可以在所有表​​格中重复使用相同的 NSCellView,而无需访问其他 .xib 文件。

标签: xcode cocoa nstableview nstableviewcell


【解决方案1】:

像这样!

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {
    return count;
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    NSView *customView = [tableView makeViewWithIdentifier:@"customview"
                                                     owner:self];
    …… // set properties
    return customView;
}

在界面生成器中,将自定义单元格视图的标识符设置为“customview”,它将自动创建!示例:

只需将“自动”替换为您正在使用的标识符

【讨论】:

  • 亚历克斯,感谢您的回复。但是,我已经像您的示例中那样工作了,其中表格视图单元格(如您的屏幕截图中所示)已经与 IB 中的表格/部分相关联。我要做的是将该单元格移到任何一个单独的表格之外,以便可以在多个表格中使用相同的单元格布局(由许多不同的控件组成),而无需每次都重新布局。我确实尝试使用相同的代码,但没有出现任何内容(大概是因为它不知道在哪里看)。我开始假设这可能根本不可能......
  • 你可能需要继承nsview。它真的不难。否则,如果您必须使用 ib,您可以为它制作一个单独的 nib,就像在您链接的示例中一样,使用带有 nib 名称的 init
  • 好的,谢谢,我必须更好地阅读有关子类化 NSView 的内容。我确实有一个测试,它是一个单独的 Nib,但没有工作 - 但是我不认为我是子类化(或者如果我是因为我只是从某个地方复制了一些代码,并没有明白它)。我需要几天的时间来尝试它,但如果/当我找到解决方案时,我会反馈我的进展情况。干杯。
  • 嘿大卫,我正在尝试和你做同样的事情,但在弄清楚如何做这个(看似简单的)事情时遇到了麻烦。你最终是如何解决这个问题的?干杯。
  • @Cypher 如果这对任何人都有帮助,tableView:viewForTableColumn:row: 方法在表视图委托中,不是数据源。
猜你喜欢
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2017-10-15
相关资源
最近更新 更多