У меня есть простое приложение, в котором перечислены некоторые модели в NSTableView
.Программно добавляя столбцы (с привязками) к NSTableView на основе представления?
Таблица представляет собой полностью стандартную таблицу на основе представления с несколькими столбцами и заполняется через NSArrayController
с использованием привязок. Все это настраивается в Interface Builder и работает так, как ожидалось.
Теперь я хочу добавить еще несколько столбцов программным способом и связать эти новые столбцы с различными ключевыми путями в моделях. И там, я застрял.
Для простоты предположим эту установку:
- Объекты модели простые объекты с помощью всего одного свойства NSString:
name
- AppDelegate имеет свойство NSArray (
models
), который имеет ряд модели экземпляров. - Объект NSArrayController
content
привязан к массивуmodels
делегата приложения. - NSTableView's
content
привязан к контроллеру массиваarrangedObjects
. - первой колонка таблицы связана (в МБ), чтобы отобразить
name
свойства, ячейка → значение т.е. столбец → ячейка таблицы вида → статический текст представления таблицы обязано представление таблицы клетки objectValue.name
Это, насколько я знаю, прямолинейно и по книге, и это работает как шарм.
Но ... Как добавить дополнительные столбцы?
Чтобы добавить столбец программно (сохранить его простым, давайте просто скажем, этот новый столбец должен также просто отобразить name
свойства, так же, как столбец, который уже есть), я думаю, что я сделаю что-то подобное в приложение делегат:
NSTableColumn* newColumn = [[NSTableColumn alloc] initWithIdentifier:@"newColumn"];
// do binding magic somehow
// [[newColumn dataCell] bind:NSValueBinding toObject:??? withKeyPath:??? options:nil];
[self.table addColumn:newColumn]; // the table's connected with an IBOutlet
Я пробовал так много комбинаций связывания из/в ячейку данных, таблицы, столбец, контроллер массива, сам массив, а также все манера keypaths, но ничего не работает. Новый столбец добавлен просто отлично, но он никогда не заселен.
Я предполагаю, что основной экземпляр NSTableColumn, который я создаю, основан на ядре, а не на основе представления, и это вызывает проблемы. Тем не менее, я понятия не имею, как исходить отсюда, и в документах никогда не говорится о привязке столбцов, которые были добавлены программно.
В этом случае все, что я хочу, это простой текстовый столбец, привязанный к модели, точно такой же, как я могу легко настроить IB.
Я мог бы сделать все это, реализовав NSTableViewDataSource
и «вручную» подавая таблицу, но у меня есть все, что было настроено с привязками.
Любая помощь была бы принята с благодарностью.
Извините, не работает; попробовал. Связывание столбца работает только для сотовых таблиц. Не основанные на просмотре таблицы. – Flambino