Я использую основанный на представлении NSOutlineView
для отображения и выбора элементов с иерархической структурой для научного приложения.
Каждая строка в столбце структуры представляет элемент, обозначенный значком для элемента (все то же на рисунке), флажок, который показывает, выбран ли элемент, и имя элемента. Мне нужно, чтобы значок, флажок и имя отображались в одной ячейке, поэтому я использую основанный на представлении NSOutlineView
.
Я реализовал протокол NSOutlineViewDataSource
для подачи данных в контурный вид.
Метод outlineView:objectValueForTableColumn:byItem:
предоставляет пользовательский объект со свойствами BOOL selected
и NSString *name
.
Мой пользовательский вид ячейки таблицы в IB выглядит следующим образом:
Я установил значение флажка на objectValue.selected
, а значение метки на objectValue.name
.
Как я и надеялся, представление структуры хорошо отображает имя и состояние выбора, предоставляемые objectValue.
Однако, если я изменяю состояние флажка, метод outlineView:setObjectValue:forTableColumn:byItem:
, определенный в протоколе NSOutlineViewDataSource, не запускается в моем источнике данных для предоставления вновь измененного значения объекта. Обратите внимание, что если я не использую пользовательское представление для ячейки, это работает.
Я проверил, действительно ли вид ячейки таблицы objectValue.selected
изменяется при установке флажка, вставляя оператор NSLog в метод setSelected
объекта, который передается как objectValue
. selected
член корректно изменяет состояние.
Как мне передать изменение objectValue
обратно в модель моего источника данных? Я проверил методы делегата NSOutlineView, но не могу найти способ сигнализировать, что objectValue представления ячейки было изменено моим флажком (то есть, что представление ячейки "закончило редактирование"). Есть ли какой-то другой фундаментальный момент, который я упускаю?