Округленный NSTextFieldCell как iCal - PullRequest
1 голос
/ 05 сентября 2010

Я пытаюсь нарисовать подкласс 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];
}

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

Ответы [ 2 ]

2 голосов
/ 05 сентября 2010

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

[[textfield cell] setBezelStyle: NSTextFieldRoundedBezel];
1 голос
/ 05 сентября 2010

Исходя из этого вопроса , в моем подклассе есть следующий код:…

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

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

[gradient drawInRect:cellFrame angle:90];

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

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

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

...