【问题标题】:NSTableView with custom cells带有自定义单元格的 NSTableView
【发布时间】:2010-10-28 22:59:30
【问题描述】:

似乎我已经搜索了很长时间,但没有找到一个很好、简单、可以解决我的问题的方法。

我将 XCode 与 Cocoa/ObjC 一起使用,并尝试创建一个 NSTableView,它将值从 NSDictionary/Array 加载到单元格的不同部分。

例如,我正在尝试将 NSImage、NSTextField 和其他项目放入自定义单元格(以及背景图像)。但是,我找不到如何创建这个的简单答案..

我用 UITableViews 为 iPhone 编写代码已经有一段时间了,但似乎找不到与 NSTableViews 类似的方法。

任何帮助都会非常棒!

谢谢

多米尼克

【问题讨论】:

标签: objective-c cocoa xcode macos osx-leopard


【解决方案1】:

NSTableView 有-tableView:dataCellForTableColumn:row:。只需在您的委托中创建您的 NSCell 子类,如果您需要对该行进行自定义,请返回它。如果您只是为表格视图中的每一行使用自定义单元格,您也可以只使用 IB 设置自定义单元格类。

表格视图将根据需要复制单元格,因此如果效率更高,您可以将单元格保留为实例变量。表视图上的数据源方法或绑定正常工作,只是您将返回填充的字典而不是单个字符串或数字。您也可以将自定义模型对象直接传递给 tableview,尽管您必须使其可复制,或覆盖单元格中的 setObjectValue: 以将其包装在 NSValue 中。

如果将 NSCell 子类化给您带来麻烦,那可能是一种学习体验。从-drawWithFrame:inView: 开始绘制所有自定义对象,然后在需要更多功能时从那里开始。

【讨论】:

  • 感谢您的信息!我发现很少有关于 NSCells 的文档。
  • 如果您正在设计具有实例变量的自定义单元格,请仔细阅读文档,因为某些方法必须像“copyWithZone:”这样实现。
  • 所以我必须在我的自定义 NSCell 子类中实现 -setObjectValue: 并在 -tableView:objectValueForTableColumn:row: 中返回正确单元格的对象值?
【解决方案2】:

一个单元格一次只能保存一个对象值。用图像和字符串/属性字符串作为属性创建一个模型对象,并用它填充表格视图。

此外,文本字段是一个视图。你的模型不应该知道它的表现——那是你的视图的工作。

【讨论】:

    【解决方案3】:

    观看 WWDC 2011 视频“基于视图的 NSTableView 基础到高级”(第 120 节)

    https://developer.apple.com/videos/wwdc/2011/

    这适用于 Lion (10.7) 及更高版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      相关资源
      最近更新 更多