圆形的NSTextFieldCell就像iCal一样

时间:2010-09-05 18:00:11

标签: objective-c cocoa nstextfieldcell

我正在尝试绘制一个NSTextFieldCell子类,它看起来像iCal中的舍入事件项普通表。

基于this question,我的子类中有以下代码:

- (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 个答案:

答案 0 :(得分:2)

如何打电话:

[[textfield cell] setBezelStyle: NSTextFieldRoundedBezel];

答案 1 :(得分:1)

  

基于this question,我的子类中有以下代码:...

该问题的接受答案假定单元格位于文本字段中(即,它是视图中唯一的单元格,它实际上是整个视图),并且该视图是或可以是图层支持的。

当你是一个表列的单元格时,这将不起作用,因为你不应该重绘整个视图并使它支持图层的可能不能正常工作。 (我不确定是否可以预期文本字段的图层支持也可以正常工作。除了普通的NSView之外的任何一个都可以支持或不支持;如果文档没有说明,则假设它不是。)

[gradient drawInRect:cellFrame angle:90];
     

但这只是将单元格绘制为普通矩形,使用渐变填充,但没有圆角。

烨。这就是所有这些方法所做的,因此如果没有指定圆角(例如,作为图层的角半径),则需要自己构造并绘制带圆角的形状。

为此,create a path for a rectangle with rounded cornersdraw the gradient in that