NSTableView с пользовательскими ячейками - PullRequest
17 голосов
/ 26 мая 2009

похоже, я долго искал и не нашел хорошего, легкого ответа на мою проблему.

Я использую XCode с Cocoa / ObjC и пытаюсь создать NSTableView, который будет загружать значения из NSDictionary / Array в разные секции ячейки.

Например, я пытаюсь получить NSImage, NSTextField и другие элементы в пользовательскую ячейку (вместе с фоновым изображением). Тем не менее, я не могу найти простой ответ о том, как создать это ..

Я уже некоторое время кодирую для iPhone с UITableViews и, похоже, не могу найти аналогичного способа с NSTableViews.

Любая помощь была бы очень полезна!

Спасибо

Dominic

Ответы [ 3 ]

26 голосов
/ 26 мая 2009

NSTableView имеет -tableView:dataCellForTableColumn:row:. Просто создайте свой подкласс NSCell в своем делегате и верните его, если вам нужна настройка для этой строки. Если вы просто используете свою пользовательскую ячейку для каждой строки в табличном представлении, вы также можете просто использовать IB для установки пользовательского класса ячейки.

Табличное представление будет копировать ячейку по мере необходимости, поэтому вы можете сохранить ячейку в качестве переменной экземпляра, если она будет более эффективной. Методы или привязки источника данных в табличном представлении работают, как обычно, только вы вернете заполненный словарь вместо одной строки или числа. Вы также можете передать объект пользовательской модели непосредственно в представление таблицы, хотя вам придется сделать его копируемым или переопределить setObjectValue: в своей ячейке, чтобы обернуть его в NSValue.

Если это подкласс NSCell, который доставляет вам неприятности, это может быть небольшим опытом обучения. Начните с -drawWithFrame:inView:, чтобы нарисовать все свои пользовательские объекты, и переходите оттуда к нужным вам функциям.

8 голосов
/ 18 января 2012

Посмотрите видеоролик WWDC 2011 "Просмотр на основе NSTableView от базового до расширенного" (сеанс 120)

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

Это относится к Льву (10.7) и выше.

3 голосов
/ 26 мая 2009

Ячейка может содержать только одно значение объекта за раз. Создайте объект модели с изображением и строкой / атрибутной строкой в ​​качестве свойств, и заполните табличное представление этим.

Кроме того, текстовое поле является представлением. Ваша модель не должна ничего знать о своем представлении - это работа ваших взглядов.

...