NSTableView с пользовательскими ячейками
Кажется, я долго искал и не нашел большого, легкого ответа на мою проблему.
Я использую XCode с Cocoa/ObjC и пытаюсь создать NSTableView, который будет загружать значения из NSDictionary/Array в разные секции ячейки.
Например, я пытаюсь получить NSImage, NSTextField и другие элементы в пользовательскую ячейку (вместе с фоновым изображением). Однако я не могу найти простой ответ на вопрос о том, как создать это.
Я уже некоторое время кодирую iPhone с UITableViews и не могу найти аналогичный способ с NSTableViews.
Любая помощь будет действительно замечательной!
Спасибо
Доминик
Ответы
Ответ 1
NSTableView имеет -tableView:dataCellForTableColumn:row:
. Просто создайте подкласс NSCell в своем делетете и верните его, если вам нужна настройка для этой строки. Если вы используете свою собственную ячейку для каждой строки в представлении таблицы, вы также можете просто использовать IB для установки пользовательского класса ячеек.
Вид таблицы скопирует ячейку по мере необходимости, поэтому вы можете сохранить ячейку в качестве переменной экземпляра, если она будет более эффективной. Методы источника данных или привязки в представлении таблицы работают так, как обычно, только вы вернете свой заполненный словарь вместо одной строки или числа. Вы также можете передать пользовательский объект модели непосредственно в tableview, хотя вам придется сделать его скопированным или переопределить setObjectValue:
в своей ячейке, чтобы обернуть его в NSValue.
Если он подклассифицирует NSCell, что дает вам проблемы, это может быть немного учебным опытом. Начните с -drawWithFrame:inView:
, чтобы нарисовать все ваши пользовательские объекты и оттуда оттуда, поскольку вам нужно больше функций.
Ответ 2
Посмотрите видео WWDC 2011 "Просмотр на основе NSTableView от Basic до Advanced" (сеанс 120)
https://developer.apple.com/videos/wwdc/2011/
Это относится к Льву (10.7) и выше.
Ответ 3
Ячейка может удерживать только одно значение объекта за раз. Создайте объект модели с изображением и строкой/атрибутной строкой в качестве свойств и заполните это представление таблицей.
Кроме того, текстовое поле представляет собой представление. Ваша модель не должна знать ничего о своем представлении - что ваша работа взглядов.