5

我正在尝试解决一个听起来很简单的问题:更改 NSPopupButton 的背景颜色。

Interface Builder 只允许将样式更改为预定义的样式,并且不允许更改背景颜色。此外,设置 anIBOutlet并没有帮助,因为NSPopupButton没有setBackgroundColor方法。

我还尝试了子类NSPopupButton化来覆盖该drawRect方法。这是我尝试过的:

- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor redColor] setFill];
    NSRectFill(dirtyRect);
}

这会在 上绘制一个红色矩形,NSPopupButton而不是将其设置为背景色。

关于如何解决这个问题的任何想法?

4

3 回答 3

11

您应该创建 NSPopUpButtonCell 的子类,然后覆盖

- (void)drawBezelWithFrame:(NSRect)frame inView:(NSView *)controlView

NSPopupButtonCell 是NSButtonCell的子类,它定义了几种用于绘制单个单元格组件的方法,例如边框、标题、图像。

然后您可以展开 NSPopupButton 并将其单元格子类更改为您的新子类,它应该使用您的绘图方法。

Cocoa 主要使用 NSCell 来处理绘图,不像 iOS

于 2012-11-09T01:11:22.190 回答
0

@DanBrooker 答案的 Swift 版本。该示例显示设置背景颜色

class PopUpButtonCell: NSPopUpButtonCell {

    override func drawBezel(withFrame frame: NSRect, in controlView: NSView) {
        guard let context = NSGraphicsContext.current?.cgContext else { return }
        NSColor.red.setFill() // NSColor.white.setFill()
        context.fill(frame)
    }
}
于 2021-11-22T09:37:20.460 回答
-3

按钮是由系统绘制的,所以没有真正的方法来设置背景颜色,让系统按照你想要的方式绘制它。你唯一能做的就是在 drawRect 方法中绘制它,也绘制标题,并绘制矩形的一部分。 

于 2012-11-05T22:35:45.393 回答