Objective c NSComboBox-选择后出现背景问题
我是一名iOS开发者,最近我正在为MacOSX编写一个桌面应用程序。我对OSX的视图组件还没有太多的经验,所以这可能是一个愚蠢或简单的问题,但我对这个问题做了一些研究,还没有找到任何解决方案 问题是: 我有一个NSView的自定义专门化,它用作NSPover中使用的Content ViewController的视图 在这个视图中,我称之为“PopoverBackgroundView”,我在drawRect内部绘制了这个红色背景,并计算了另一个较小的rect并绘制了这个类似灰色的颜色。代码如下:Objective c NSComboBox-选择后出现背景问题,objective-c,macos,nscombobox,nspopover,Objective C,Macos,Nscombobox,Nspopover,我是一名iOS开发者,最近我正在为MacOSX编写一个桌面应用程序。我对OSX的视图组件还没有太多的经验,所以这可能是一个愚蠢或简单的问题,但我对这个问题做了一些研究,还没有找到任何解决方案 问题是: 我有一个NSView的自定义专门化,它用作NSPover中使用的Content ViewController的视图 在这个视图中,我称之为“PopoverBackgroundView”,我在drawRect内部绘制了这个红色背景,并计算了另一个较小的rect并绘制了这个类似灰色的颜色。代码如下:
- (void)drawRect:(NSRect)dirtyRect
{
[[NSColor colorWithDeviceRed:174/255.0 green:72/255.0 blue:72/255.0 alpha:1.0] setFill];
NSRectFill(dirtyRect);
[[NSColor colorWithDeviceRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0] setFill];
NSRectFill(NSMakeRect(BORDER_WIDTH, BORDER_WIDTH, dirtyRect.size.width - 2*BORDER_WIDTH, dirtyRect.size.height - 2*BORDER_WIDTH));
}
因此,在popooverbackgroundview.m
中,我正在通过编程创建一个NSComboBox。这个组合框将有数字1到10。当我分配时,一切似乎都很好:
问题是,在我选择组合框内的任何选项后,它的背景不知怎么地“消失”成了透明的,我不知道,变成这样:
请注意NSComboBox周围的红色边框(视图的背景色),它是在我选择某个内容之后出现的
下面是我分配组合框并初始化它的代码:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
(...)
self.comboBox = [[NSComboBox alloc] initWithFrame:CGRectMake(15, frame.size.height - 55, 90, 25)];
self.comboBox.delegate = self;
[self.comboBox setDrawsBackground:NO];
[self.comboBox setSelectable:YES];
[self.comboBox setEditable:NO];
for (int i = 1; i<=10; i++)
{
NSString *mystr = [NSString stringWithFormat:@"%d", i];
[self.comboBox addItemWithObjectValue:mystr];
}
[self addSubview:self.comboBox];
}
return self;
}
-(id)initWithFrame:(NSRect)frame
{
self=[super initWithFrame:frame];
如果(自我){
(...)
self.comboBox=[[NSComboBox alloc]initWithFrame:CGRectMake(15,frame.size.height-55,90,25)];
self.comboBox.delegate=self;
[self.comboBox setDrawsBackground:否];
[self.comboBox setSelectable:是];
[self.comboBox设置可编辑:否];
对于(int i=1;i来说,仅仅是为了给出反馈,我终于能够解决我的问题
我不知道确切的原因,但问题都是由我在drawRect
中绘制边框的方式引起的
[[NSColor colorWithDeviceRed:174/255.0 green:72/255.0 blue:72/255.0 alpha:1.0] setFill];
NSRectFill(dirtyRect);
都是由子视图传播的,不知道是setFill还是NSRectFill。因此,NSCombobox的“背景”是用这种颜色绘制的
看到这篇文章后:我将draw rect改为:
- (void)drawRect:(NSRect)dirtyRect
{
NSBezierPath *background = [NSBezierPath bezierPathWithRoundedRect:self.bounds xRadius:10 yRadius:10];
[[NSColor colorWithDeviceRed:174/255.0 green:72/255.0 blue:72/255.0 alpha:1.0] set];
[background setLineWidth:10];
[background stroke];
}
正如我所希望的,现在一切正常。现在,在我选择组合框后,没有奇怪的背景被绘制出来
如果有人知道前一个代码中发生了什么,请告诉我。我不明白你的问题。你说“在一个NSPover中创建一个NSComboBox”是什么意思?你说combobox背景消失了。我看不到。然后你说“我怎么能随此消失…”你真的想消失吗?我编辑了这个问题,试图更具体一些,并修改了一些模棱两可的词。请告诉我,如果有什么你仍然无法理解的。