NSCell Custom Highlight - PullRequest
       7

NSCell Custom Highlight

5 голосов
/ 18 февраля 2011

Я пытаюсь создать подкласс NSCell, чтобы нарисовать собственную подсветку фона. Документация, кажется, предполагает, что переопределение highlight:withFrame:inView: должно позволить мне сделать это, но метод никогда не вызывается.

Вместо этого я переопределил drawInteriorWithFrame:inView:, который работает нормально - я могу нарисовать то, что я хочу в ячейке. Однако проблема в том, что я должен нарисовать все сам, потеряв функциональность типа NSCell, который я расширяю - например, способность NSTextFieldCell отображать текст:

Пользовательские нарисованные выделенные ячейки:

enter image description here

Однако я просто хочу перерисовать фон (выделение) и сохранить возможность использовать основные функции расширенной ячейки:

enter image description here

Конечно, я тоже мог бы просто нарисовать текст, но я надеюсь, что есть более простой способ сделать это.

Любая помощь очень ценится.

1 Ответ

11 голосов
/ 18 февраля 2011

Благодаря помощи @Bavarious мне удалось решить это. Моя расширенная реализация класса NSTextFieldCell теперь содержит:

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    return nil;
}

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    if ([self isHighlighted]) {
        // Draw highlight background here
    }

    [super drawInteriorWithFrame:cellFrame inView:controlView];
}

Ключ должен убедиться, что вы вернете nil для highlightColorWithFrame:inView:, чтобы остановить drawInteriorWithFrame:inView: рисование фона и все же вызывать его для рисования основного содержимого (в данном случае текста).

...