首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改NSPopupButton的背景色?

如何更改NSPopupButton的背景色?
EN

Stack Overflow用户
提问于 2012-11-05 03:47:40
回答 3查看 4K关注 0票数 5

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

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

我还尝试对NSPopupButton进行子类化以覆盖drawRect方法。以下是我尝试过的方法:

代码语言:javascript
复制
- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor redColor] setFill];
    NSRectFill(dirtyRect);
}

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

对如何解决这个问题有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-09 09:11:22

您应该创建NSPopUpButtonCell的子类,然后重写

代码语言:javascript
复制
- (void)drawBezelWithFrame:(NSRect)frame inView:(NSView *)controlView

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

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

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

票数 11
EN

Stack Overflow用户

发布于 2021-11-22 09:37:20

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

代码语言:javascript
复制
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)
    }
}
票数 0
EN

Stack Overflow用户

发布于 2012-11-06 06:35:45

按钮是由系统绘制的,所以没有一种真正的方法来设置背景色,使系统像want.The一样绘制它,您唯一能做的就是在drawRect方法中绘制它,还绘制标题,并绘制矩形的一部分。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13222205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档