Cocoa:如何让表格视图在每个单元格中绘制自定义视图

Posted

技术标签:

【中文标题】Cocoa:如何让表格视图在每个单元格中绘制自定义视图【英文标题】:Cocoa: How to make table view draw custom views in each cell 【发布时间】:2010-04-07 14:50:19 【问题描述】:

我正在学习 Cocoa,并尝试为 Mac 创建一个显示简单书单的应用程序。每本书都是一个带有封面图片、标题和作者的 NSView。我想将此列表显示为一个 NSTableView,每个单元格中有一个列和一个书本视图。但是我还不知道如何在界面生成器中的表格单元格内或以编程方式显示自定义视图。任何提示将不胜感激:)

Inso.

【问题讨论】:

【参考方案1】:

如果您所有的“图书浏览量”大小都相同,为什么不使用NSCollectionView / NSCollectionViewItem?这是一个更清洁的解决方案(只要它们的大小都相同)。

【讨论】:

【参考方案2】:

假设集合视图不是更好的解决方案,您需要做的是编写自定义单元格。该列恰好拥有一个这样的单元格,表格视图将使用该单元格为每一行绘制列的值。

(如果你来自 iPhone,是的,这与 UITableView 完全不同。每个 NSTableColumn 都有一个单元格,它用于每一行。)

如果你在其他地方使用你的 NSView 类,那么你可以把它变成 NSControl 的子类,并让它使用同一个单元类的另一个实例。与大多数控件一样,所有实际工作都将由单元格完成,这使您能够在多个控件(您的单个控件和表格视图)中重用该行为。

请参阅Control and Cell Programming Topics 了解更多信息。

【讨论】:

你的回答很好,很有教育意义,谢谢。然而,集合视图确实被证明是一个更好的解决方案。【参考方案3】:

Apple 在 Lion 中添加了 view-based table views,因此您现在应该可以使用 NSTableView 本地执行此操作了。

(您仍然不能将 NSView 放在 NSCell 中——这没有意义。但是您可以在表格视图中使用视图而不是单元格。)

【讨论】:

以上是关于Cocoa:如何让表格视图在每个单元格中绘制自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

如何停止在自定义表格视图单元格中交换数据?

如何在自定义表格视图单元格中保存文本字段

自定义表格视图单元格中特定元素的手势

无法在自定义表格视图单元格中使 ImageView 成为一个圆圈

自定义表格单元格中的堆栈视图

以swift语言在自定义表格视图单元格中更新进度视图下载