Я думаю, вам, возможно, придется выполнить некоторые подклассы, чтобы выполнить то, что вы пытаетесь сделать.
Используя подклассы NSTableView, вы можете переопределить подготовленныйCellAtColumn: row: метод следующим образом:
- (NSCell*) preparedCellAtColumn:(NSInteger)column row:(NSInteger)row {
NSTextFieldCell *edit_field;
edit_field = (NSTextFieldCell*) [super preparedCellAtColumn:column row:row];
if ( [self editedRow] == row && [self editedColumn] == column ) {
[edit_field setBackgroundColor:[NSColor clearColor]];
[edit_field setDrawsBackground:NO];
}
return edit_field;
}
Однако в документации NSTableView указано, что в вашей ячейке есть другой вызванный метод, который, кажется, сбрасывает цвет. (editWithFrame: inView: editor: делегат: событие :) Создание подкласса NSTextViewCell, который переопределяет этот метод, может сделать то, что вы ищете.
EDIT
Просматривая документацию я нашел это:
Если получатель не является объектом NSCell текстового типа, редактирование не выполняется. В противном случае редактор поля (textObj) имеет размер aRect, а его суперпредставление установлено на controlView, поэтому оно точно охватывает приемник.
Итак, в этом случае вам необходимо настроить редактор полей, который скрывает любые изменения отображения, которые вы выполняете в NSTableView или ячейке.
Редактор полей возвращается методом делегата окна windowWillReturnFieldEditor: toObject:
Это должно позволить вам установить свойства отредактированной ячейки перед возвратом ее в NSTableView
EDIT
Пробовал это безрезультатно, но может помочь:
-(id) windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client{
NSText *editor = [window fieldEditor:YES forObject:client];
[editor setBackgroundColor:[NSColor clearColor]];
[editor setDrawsBackground:NO];
return [editor autorelease];
}