Как показать заголовок ячейки кнопки (флажок) в табличном представлении, используя привязки - PullRequest
4 голосов
/ 10 ноября 2011

Я пытаюсь выполнить простое приложение, в котором у меня есть изменяемый массив изменяемых словарей, например -

NSMutableDictionary *sample6 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"title6",@"title",[NSNumber numberWithBool:NO],@"state", nil];

В IB я создал табличное представление с NSButtonCell (флажок).

Я смог показать состояние флажков (отмечено или не отмечено), используя следующие привязки столбцов таблицы:

Value - ArrayController.arrangedObjects.state

В этом случае он отображает массив флажков с заголовком - «Проверка», как показано на приведенном ниже экране.shot:

enter image description here

Теперь моя цель - показать заголовки флажков, используя привязки, так, чтобы он получал значение из того же изменяемого словаря, из которого он получает свое состояние.

Я пробовал следующую привязку для ячейки кнопки, но она не работала:

title -> ArrayController.selection.title

Я также пробовал этопривязка для ячейки кнопки:

title -> ArrayController.arrangedObjects.title

, но это не сработало, выглядело так после использования вышеуказанной привязки:

enter image description here

Может любойподскажите, какой ключ контроллера использовать, и если это неправильный способ показа заголовков, то как правильно это сделать?

1 Ответ

6 голосов
/ 10 ноября 2011

К сожалению, вам нужно написать небольшой код, если вы хотите сделать это таким образом. При связывании значений столбца таблицы с массивом, столбец таблицы обрабатывает, беря ячейку данных прототипа, устанавливая ее значения и «штампуя» ее на месте для каждой строки. Привязки ячейки кнопки не отображаются «через» столбец таблицы, поэтому простая привязка не сделает этого за вас.

Ответить на ваш вопрос

Итак. Поскольку отображается только привязка значения, заголовок должен быть установлен вручную, если вы действительно хотите, чтобы заголовок флажка отражал значение (т. Е. Вы действительно хотите, чтобы флажок обрабатывал как состояние проверки, так и отображение заголовка). Для этого вам нужно смешать привязки с < NSTableDelegateProtocol > . Используйте метод -tableView: willDisplayCell: forTableColumn: row: , чтобы задать для свойства -title ячейки свойство соответствующего объекта в массиве -arrangedObjects контроллера массива при каждом запросе. Смешивание привязок и методов источника / делегата данных на самом деле довольно часто встречается не только в самых простых приложениях, поэтому не беспокойтесь, что вы делаете что-то грязное. Примечание: вы не сможете поддерживать редактирование заголовка, выполнив это, поскольку это флажок.

Альтернативный дизайн

Лично я бы избегал всего этого и просто добавил бы отдельный столбец таблицы для заголовка. Свяжите значение нового столбца с arrangedObjects.title контроллера массива и отключите заголовок ячейки кнопки-флажка, чтобы отображался только сам флажок. Это значительно упрощает все и позволяет редактировать заголовок.

...