【问题标题】:Differences between NSTableView and NSCollectionViewNSTableView 和 NSCollectionView 的区别
【发布时间】:2009-10-31 20:13:52
【问题描述】:

我正在尝试决定开发我的 Snow Leopard 应用程序的路径。首先,我应该先介绍明显的区别:

NSTableView 可以有多个数据列,用于表示同一数据“元素”(一行)的不同部分,其中NSCollectionView 也可以显示数据网格,但每行+列组合都是自己的元素。出于我的目的,假设我正在处理一个列。

  1. 据我所知,NSCollectionView 项目是 NSViews,它们的尺寸必须相同。另外,与NSTableView 不同,collectionview 项目被复制到NSCollectionView,而不是根据需要由dataSource 提供(我对此不确定,如果我错了,请纠正我)。

  2. 如果您决定自定义行的显示,NSTableView 将使用 NSCells。由于NSCell 不是NSResponder,如何处理事件(如果我想为单元添加某种附件,例如 iTunes 中的箭头如何工作(尽管 iTunes 是 Carbon)。我见过IB 中的一些NSCell 子类似乎与它们的NSControl 兄弟等价,但是如果我想在NSCell 中包含MySweetView 对象怎么办?)。

  3. 在 Bindings 方面似乎两者的工作方式大致相同,对吗?

  4. 最后,NSCollectionView 似乎可以很好地处理其元素的动画(例如用于重新排列项目或过滤它们)。 NSTableView 可以对其行执行此操作吗?

还有什么我应该考虑的吗?

【问题讨论】:

    标签: cocoa cocoa-bindings nstableview nscollectionview


    【解决方案1】:
    1. 这里的区别在于,在表格视图中,每一行都是一个项目,而列显示该项目的不同方面(属性)。在集合视图中,每个行列交集都是一项。
    2. 我还没有这样做,但尝试在您的表视图委托中实现tableView:didClickTableColumn:。该方法是 10.6 中的新方法。您需要获取[NSApp currentEvent],并可能将其传递给列单元格中的方法。
    3. 使用表格视图,您可以绑定列;您不绑定视图(无论如何,不​​提供内容;您确实为选择索引之类的东西绑定了视图)。对于集合视图,没有列(参见 #1),因此您始终绑定视图。
    4. 没有。

    【讨论】:

    • 对于第 1 点,我在前言中提到了这一点。我关心的是如何将数据提供给表格与 CV。 CV 的NSCollectionViewItem 有一个representedObject 和一个view 属性,但是CV 是否向代表询问此信息,或者NSCVI 是否充当负责此或...的控制器?这个类的文档严重缺乏!
    • 查看类引用,您似乎在 content 中为集合视图提供了您的模型对象,并且它将从其原型为它们创建 CVI。每个模型对象都是 CVI 的representedObject
    【解决方案2】:

    FWIW,NSTableView 是 AppKit 的一个非常古老的部分,而且有点笨拙。

    如果您是该平台的新手,我建议您先了解一下 NSCollectionView。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多