Добавление редактируемого NSTextFieldCell в мой NSTableView - PullRequest
2 голосов
/ 17 мая 2011

У меня есть NSTableView, который отображает некоторую информацию, представляющую мой собственный объект. Я не использую привязки.

Обычно я создаю свои собственные NSCell для отображения данных, но на этот раз мне нужен NSTextFieldCell, который будет отображать строковое значение объекта, а также позволять пользователю редактировать его.

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

NSTextFieldCell *textField = [[NSTextFieldCell alloc] init];
[textField setFont:[NSFont fontWithName:@"Helvetica Bold" size:13]];
[textField setTextColor:[NSColor colorWithDeviceRed:0.1058823529 green:0.2117647059 blue:0.3294117647 alpha:1.0]];
[textField setStringValue:projectName];
[textField setEditable:YES];
[textField setBordered:NO];

[textField drawWithFrame:textRect inView:controlView];
[textField release];

Может ли кто-нибудь помочь мне с этим?

1 Ответ

3 голосов
/ 19 мая 2011

NSTextFieldCell реализован с помощью шаблона flyweight (я читал об этом в книге «Шаблоны проектирования Какао»), и в каждом столбце есть только один экземпляр ячейки.Вы можете увидеть какое-то доказательство этого, когда редактируете его в конструкторе интерфейсов.Когда вы щелкаете, чтобы редактировать NSTableView, этот единственный экземпляр ячейки возвращается туда, где он был раньше, и обрабатывает редактирование для вас.

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

Однако в этом случае вы создаете ячейку, рисуете ее, а затем выбиваете ее из памяти, освобождая ее в конце кода.Итак, как вы ожидаете эту ячейку, которую вы установили как редактируемую, когда будете пытаться ее редактировать?Он больше не существует.

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

- (void)setDataCell:(NSCell *)aCell

В качестве альтернативы вы можетеподкласс NSTextFieldCell и настройте его там, и установите класс ячейки для столбца в построителе интерфейса (или XCode 4, если вы находитесь на переднем крае!)

...