drawWithFrame:将NSTextFieldCell背景绘制为未与框架注册

时间:2018-11-26 14:21:00

标签: cocoa nstextfieldcell

我无法创建并以编程方式绘制NSTextFieldCell,从而无法重新创建在Interface Builder中构建并由Cocoa自动绘制时相同配置的NSTextFieldCells的外观。

Context是一个自定义的NSView,它显示用户可以选择,删除或替换的内容。尽管此内容不是文本内容,但我希望该字段类似于NSTextField,因此我试图将NSTextFieldCell放入服务中以绘制与相应的NSTextField匹配的边框,背景填充等。

我在自定义控件init()期间按如下方式设置单元格:

textFieldCell = [[NSTextFieldCell alloc] init];
[textFieldCell setDrawsBackground: YES];
[textFieldCell setBackgroundColor: NSColor.blueColor];
[textFieldCell setBackgroundStyle: NSBackgroundStyleNormal];
[textFieldCell setBezeled: YES];
[textFieldCell setStringValue: @""];

,然后在自定义控件的drawRect中,

- (void) drawRect: (NSRect) rect
{
    // Draw an NSTextField-like background
    if( isSelectAndDeletable)
    {
         [textFieldCell drawWithFrame: [self bounds] inView: self];
    }
    ...  // more content drawing here
 }

这会在屏幕上生成适当厚度和大小的1像素帧,并用蓝色填充。 但是框架本身是灰色的,而不是蓝色,并且填充物触摸顶部的框架(没有白色边距),并在底部缺少两个像素(白色的空白边距)。相反,当我让Cocoa可以将我的textFieldCells绘制为NSTextField的一部分,也可以作为在Interface Builder中创建的独立单元格来绘制,框架将使用单元格的背景色进行绘制,并且填充处将填充一个像素的白色边距。

This picture demonstrates the problem.它显示了三个NSTextFieldCell,其中第二个(有缺陷地)是由我自己对drawWithFrame:inView:的调用绘制的,另外两个(正确地)是在运行时直接绘制的。

有什么主意我做错了吗?我感觉自己传递的是正确的矩形(框架位于正确的位置),并且一次调用会产生正确的笔触(框架)和错误的填充(背景)。这是配置错误的边框效果吗?我可以手绘我想要的效果,但是如果我可以在这里解决问题,我宁愿坚持使用NSTextFieldCell。

0 个答案:

没有答案