2009-05-26 2 views
16

кажется, что я долго искал и не нашел большой, простой ответ на мою проблему.NSTableView с пользовательскими ячейками

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

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

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

Любая помощь будет действительно замечательной!

Благодаря

Dominic

+0

Вот мой [визуальный подход] (http://stackoverflow.com/questions/5884265/how-to-setup-a-nstableview-with-a-custom-cell-using-a-subview) (все еще некоторые проблемы с рендерингом) – JJD

ответ

26

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

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

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

+1

Спасибо за информацию! Я нашел очень мало документации относительно NSCells. –

+3

Если вы создаете пользовательскую ячейку с переменными экземпляра, внимательно прочитайте документацию, так как некоторые методы ДОЛЖНЫ быть реализованы как «copyWithZone:». –

+0

Итак, мне нужно реализовать '-setObjectValue:' в моем подклассе NSCell и просто вернуть значение объекта для правой ячейки в '-tableView: objectValueForTableColumn: row:'? – 11684

3

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

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

Смежные вопросы