在 NSSearchField 子类的 drawRect 中设置背景颜色

Posted

技术标签:

【中文标题】在 NSSearchField 子类的 drawRect 中设置背景颜色【英文标题】:Setting background color in drawRect of NSSearchField subclass 【发布时间】:2012-10-24 14:35:00 【问题描述】:

我有一个 NSSearchField 的自定义子类,我想设置它的背景颜色。

@interface CustomNSSearchField : NSSearchField
@end

到目前为止,我已经尝试过:

尝试 #1

@implementation CustomNSSearchField

- (void)drawRect:(NSRect)rect

    [super drawRect:rect];

    [self setDrawsBackground:YES];
    [self setBackgroundColor:[NSColor redColor]];

完全没有视觉上的变化:

然后我按照here的建议也尝试了:

尝试 #2

- (void)drawRect:(NSRect)rect

    [super drawRect:rect];

    [[NSColor redColor] setFill];
    NSRectFill(rect);

结果如下:

如何在搜索字段的文本设置背景颜色?

【问题讨论】:

【参考方案1】:

你必须重绘整个东西。 没有属性可以专门更改 NSSearchField 的背景颜色。 看看这个例子:

Custom NSSearchField

编辑:

还有什么值得指出的。 您永远不应该覆盖控件的 drawRect 方法。 您应该创建NSSearchFieldCell 的子类。

【讨论】:

谢谢。子类化 NSSearchFieldCell 而不是 NSSearchField 解决了问题。 @aam1r,你能发布你的工作代码吗?我正在尝试获得与工作类似的东西,但运气不佳。 @Zenox:很抱歉,我无法粘贴代码库的 sn-ps。不过我建议看BWToolkit。它是一个常用 UI 元素的库。它是开源的,我必须浏览代码库才能了解他们是如何进行自定义的,并遵循了类似的想法。 @Zenox 你到底有什么问题?我会尽力帮助你的。 我试过了,它对我不起作用。如果有人有工作代码,请发布。

以上是关于在 NSSearchField 子类的 drawRect 中设置背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

强制 NSSearchField 在成为第一响应者时开始编辑

跨多个 UIView 子类的单个 drawRect 实现

完成后辞职 NSSearchField 的第一响应者的干净方法?

NSSearchField 没有按预期工作

NSSearchField 清空时没有发送任何操作?

UITableViewCell 自定义CG绘制iOS 7