Добавление строки с прозрачным фоном - PullRequest
4 голосов
/ 22 февраля 2011

У меня есть NSTableView, с кнопкой «Добавить» под ним. Когда я нажимаю на кнопку, новая строка добавляется в таблицу и готова для ввода пользователем.

Строка отображается белым цветом. Могу ли я установить цвет строки в прозрачный цвет? Это возможно? Я не могу понять, как это сделать.

Мой код для настройки прозрачности моей таблицы:

[myTable setBackgroundColor:[NSColor clearColor]];
[[myTable enclosingScrollView] setDrawsBackground: NO];

Код для добавления строки:

[myTableArray addObject:@""];
[myTable reloadData];
[myTable editColumn:0 row:[myTableArray count]-1 withEvent:nil select:YES];

Ответы [ 2 ]

1 голос
/ 08 июля 2011

попробуйте установить прозрачный цвет фона ячейки

[cell setBackgroundColor: [UIColor clearColor]];

у меня все работает

0 голосов
/ 07 апреля 2011

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

Используя подклассы 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];
}
...