objective-c - 如何更改 NSPopupButton 的背景颜色?

标签 objective-c cocoa nsview nsbutton nspopupbutton

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

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

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

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

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

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

最佳答案

你应该创建一个 NSPopUpButtonCell 的子类,然后覆盖

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

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

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

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

关于objective-c - 如何更改 NSPopupButton 的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13222205/

相关文章:

objective-c - 在 Core Graphics 中倾斜路径/形状

ios - 按字符串删除所有重音

objective-c - 旋转图像时保持图像上的文本可读

web-services - 使用 Objective C 进行 SOAP 查询

objective-c - 有没有办法将可点击的链接打印到控制台?

iphone - 顺序 UIView 变换

cocoa - CoreData 未将类型设置为 XML

cocoa - 从 subview 中删除 View 不会调用 willRemoveSubview

objective-c - 处理 NSStatusItem 上的 onMouseOver 和 onMouseOut

objective-c - NSRulerView,将垂直尺寸延伸到底部