我正在尝试绘制一个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];
}
但这只是将单元格绘制为普通矩形,使用渐变填充,但没有圆角。我显然错过了什么,但是什么?
答案 0 :(得分:2)
如何打电话:
[[textfield cell] setBezelStyle: NSTextFieldRoundedBezel];
答案 1 :(得分:1)
基于this question,我的子类中有以下代码:...
该问题的接受答案假定单元格位于文本字段中(即,它是视图中唯一的单元格,它实际上是整个视图),并且该视图是或可以是图层支持的。
当你是一个表列的单元格时,这将不起作用,因为你不应该重绘整个视图并使它支持图层的可能不能正常工作。 (我不确定是否可以预期文本字段的图层支持也可以正常工作。除了普通的NSView之外的任何一个都可以支持或不支持;如果文档没有说明,则假设它不是。)
[gradient drawInRect:cellFrame angle:90];
但这只是将单元格绘制为普通矩形,使用渐变填充,但没有圆角。
烨。这就是所有这些方法所做的,因此如果没有指定圆角(例如,作为图层的角半径),则需要自己构造并绘制带圆角的形状。
为此,create a path for a rectangle with rounded corners和draw the gradient in that。