Различия между NSTableView и NSCollectionView - PullRequest
2 голосов
/ 31 октября 2009

Я пытаюсь решить, какой путь выбрать для разработки приложения Snow Leopard. Во-первых, я должен предвосхитить очевидные различия:

NSTableView может иметь несколько столбцов данных для представления различных частей одного и того же «элемента» данных (строки), где NSCollectionView также может отображать сетку данных, но каждая комбинация строки + столбца является своей собственной элемент. Предположим, я имею в виду один столбец.

  1. Насколько я могу судить, NSCollectionView предметов - это NSView с, которые все должны иметь одинаковые размеры. Кроме того, в отличие от NSTableView, элементы коллекционного вида копируются в NSCollectionView, а не предоставляются по мере необходимости dataSource (я не уверен в этом, пожалуйста, исправьте меня, если я ошибаюсь).

  2. NSTableView использует NSCell s, если вы решите настроить отображение строк. Поскольку NSCell не NSResponder, как обрабатывать события (если я хотел добавить какой-то аксессуар в ячейку, например, как работают стрелки в iTunes (хотя iTunes - это Carbon). Я видел некоторые NSCell подклассы в IB, которые кажутся эквивалентами их NSControl братьев, но что, если я хочу иметь MySweetView объектов в NSCell?).

  3. Кажется, что оба работают примерно одинаково в отношении Bindings, верно?

  4. Наконец, NSCollectionView, кажется, хорошо играет с анимацией его элементов (для переупорядочения элементов или их фильтрации, например). Может ли NSTableView сделать это со своими строками?

Что-нибудь еще, что я должен рассмотреть?

Ответы [ 2 ]

3 голосов
/ 01 ноября 2009
  1. Разница в том, что в табличном представлении каждая строка представляет собой один элемент, а столбцы показывают различные аспекты (свойства) этого элемента. В представлении коллекции каждое пересечение строки-столбца представляет собой один элемент.
  2. Я не сделал этого, но попробуйте реализовать tableView:didClickTableColumn: в вашем делегате табличного представления. Этот метод является новым в 10.6. Вам нужно получить [NSApp currentEvent] и, вероятно, передать его методу в ячейке столбца.
  3. В табличном представлении вы связываете столбец; вы не привязываете представление (в любом случае, чтобы не предоставлять контент; вы связываете представление для таких вещей, как индексы выбора). В представлении коллекции нет столбцов (см. # 1), поэтому вы всегда привязываете представление.
  4. Номер
2 голосов
/ 01 ноября 2009

FWIW, NSTableView - это очень старая часть AppKit, и она немного грубовата.

Если вы новичок в платформе, я бы порекомендовал вам сначала разобраться с NSCollectionView.

...