1

我正在尝试绘制一个 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];
}

但这只是将单元格绘制为普通矩形,带有渐变填充,但没有圆角。我显然错过了一些东西,但是什么?

4

2 回答 2

2

怎么打电话:

[[textfield cell] setBezelStyle: NSTextFieldRoundedBezel];
于 2010-09-05T18:07:28.297 回答
1

基于这个问题,我的子类中有以下代码:...</p>

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

当您是表格列的单元格时,这将不起作用,因为您不应该重绘整个视图并使其成为图层支持可能无法正常工作。(我不确定人们是否可以期望文本字段的图层支持正常工作。除了普通的 NSView 之外的任何内容都可以在图层支持或不支持的情况下工作;如果文档没有说是,假设不是。)

[gradient drawInRect:cellFrame angle:90];

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

是的。这就是这个方法所做的一切,所以在没有指定圆角的情况下(例如,作为图层的圆角半径),您需要自己构造和绘制带有圆角的形状。

为此,为带圆角的矩形创建一个路径,并在其中绘制渐变

于 2010-09-05T19:33:08.013 回答