NSTableView和NSCollectionView之间的差异

时间:2009-10-31 20:13:53

标签: cocoa cocoa-bindings nstableview nscollectionview

我正在尝试决定开发Snow Leopard应用程序的路径。首先,我应该提出明显的不同之处:

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

  1. 据我所知,NSCollectionView项目NSView,所有项目必须具有相同的维度。此外,与NSTableView不同,collectionview项目被复制到NSCollectionView,而不是dataSource根据需要提供(我不确定,如果我错了请纠正我)

  2. 如果您决定自定义行显示,则
  3. NSTableView会使用NSCell。由于NSCell不是NSResponder,如何处理事件(如果我想在单元格中添加某种附件,就像iTunes中的Arrows如何工作(尽管iTunes是Carbon)。我在IB中看到了一些NSCell子类,它们似乎是他们NSControl兄弟的等价物,但是如果我想在MySweetView中拥有NSCell个对象怎么办?

  4. 对于Bindings而言,两者似乎都是一样的,对吗?

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

  6. 我还应该考虑其他什么?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

FWIW,NSTableView是AppKit的一个非常古老的部分,它有点苛刻。

如果您是平台的新用户,我建议您首先了解NSCollectionView。