Добавление редактируемого NSTextFieldCell в мой NSTableView

У меня есть 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];

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


person Ricky    schedule 17.05.2011    source источник


Ответы (1)


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

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

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

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

- (void)setDataCell:(NSCell *)aCell

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

person Mathieu Tozer    schedule 19.05.2011