Закругленный NSTextFieldCell, как iCal

Я пытаюсь нарисовать подкласс NSTextFieldCell, который выглядит как обычная таблица округленных событий в iCal.

Основываясь на этом вопросе, в моем подклассе есть следующий код:

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {

    NSGradient *gradient = [[NSGradient alloc] initWithStartingColor:[NSColor lightGrayColor] endingColor:[NSColor grayColor]];
    [gradient drawInRect:cellFrame angle:90];
    controlView.layer.cornerRadius = 0.5f;
    [[self title] drawInRect:cellFrame withAttributes:nil];
}

Но это просто рисует ячейку как обычный прямоугольник с градиентной заливкой, но без закругленных углов. Я явно что-то упускаю, но что?


person Stuart Tevendale    schedule 05.09.2010    source источник
comment
Не забудьте освободить объект градиента, если этот код не работает под GC.   -  person Peter Hosey    schedule 05.09.2010


Ответы (2)


Основываясь на этом вопросе, в моем подклассе есть следующий код: …

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

Это не сработает, когда вы являетесь ячейкой столбца таблицы, потому что вы не должны перерисовывать все представление, а сделать его многоуровневым вероятно не получится правильно. (Я не уверен, что можно ожидать, что поддержка слоя текстового поля будет работать правильно. Все, кроме простого NSView, либо создано для работы с поддержкой слоя, либо нет; если документация не говорит, что это так, предположим это не так)

[gradient drawInRect:cellFrame angle:90];

Но это просто рисует ячейку как обычный прямоугольник с градиентной заливкой, но без закругленных углов.

Ага. Это все, что делает этот метод, поэтому, если закругленные углы уже не указаны (например, в качестве углового радиуса слоя), вам нужно построить и нарисовать форму с закругленными углами самостоятельно.

Для этого создать путь для прямоугольника с закругленными углами и нарисуйте в нем градиент.

person Peter Hosey    schedule 05.09.2010
comment
Отлично, спасибо за помощь! Как раз то, что я хотел. - person Stuart Tevendale; 06.09.2010
comment
Если это поможет кому-то еще, окончательный код для моего класса находится здесь: yellowfield.co .uk/блог/?p=17 - person Stuart Tevendale; 10.09.2010

Что насчет звонка:

[[textfield cell] setBezelStyle: NSTextFieldRoundedBezel];
person Lothar    schedule 05.09.2010
comment
Это по-прежнему рисует его как прямоугольник с градиентной заливкой. - person Stuart Tevendale; 05.09.2010