Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何更改NSPoupButton的背景色?_Objective C_Cocoa_Nsview_Nsbutton_Nspopupbutton - Fatal编程技术网

Objective c 如何更改NSPoupButton的背景色?

Objective c 如何更改NSPoupButton的背景色?,objective-c,cocoa,nsview,nsbutton,nspopupbutton,Objective C,Cocoa,Nsview,Nsbutton,Nspopupbutton,我正在尝试解决一个听起来很简单的问题:更改NSpoupButton的背景色 Interface Builder只允许将样式更改为预定义样式,不允许更改背景色。此外,设置IBOutlet也没有帮助,因为nspoupbutton没有setBackgroundColor方法 我还尝试子类化nspoupbutton,以覆盖drawRect方法。以下是我尝试过的: - (void)drawRect:(NSRect)dirtyRect { [[NSColor redColor] setFill];

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

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

我还尝试子类化
nspoupbutton
,以覆盖
drawRect
方法。以下是我尝试过的:

- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor redColor] setFill];
    NSRectFill(dirtyRect);
}
这会在
nspoupbutton
上绘制一个红色矩形,而不是将其设置为背景色


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

这个按钮是由系统绘制的,因此没有一种真正的方法来设置背景颜色,让系统按照你想要的方式绘制。你唯一能做的就是用drawRect方法绘制它,同时绘制标题,并绘制矩形的一部分。

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

- (void)drawBezelWithFrame:(NSRect)frame inView:(NSView *)controlView
NSPopupButtonCell是其中的一个子类,它定义了几种用于绘制单个单元格组件的方法,例如边框、标题、图像

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

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