NSComboBox - 选中时背景问题

时间:2013-07-31 14:57:37

标签: objective-c macos nscombobox nspopover

我是iOS开发人员,最近我正在为MAC OSX编写桌面APP。我仍然没有太多关于OSX的View组件的经验,所以也许这是一个愚蠢或简单的问题,但我已经对这个问题进行了一些研究并找不到任何解决方案。

问题在于:

我有一个NSView的自定义特化,用作我的NSPopover中使用的Content ViewController的视图。

在这个视图中,我正在调用" PopoverBackgroundView",我在drawRect里面绘制了这个红色背景,并计算了另一个小矩形并涂上了这种类似灰色的颜色。这是代码:

- (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));
}

所以,在PopoverBackgroundView.m我内部以编程方式创建一个NSComboBox。这个组合框的编号为1到10.当我分配它时,一切似乎都很好:

enter image description here

问题是,在我选择组合框内的任何选项之后,它的背景以某种方式消失了#34;消失了#34;变得透明,我不知道,变成这样:

enter image description here

请注意NSComboBox周围的红色框架(视图的背景颜色),这个框架出现在我选择的东西之后。

这是我分配comboBox并初始化它的代码:

- (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;
}

任何想法我怎样才能修复&#39;这个&#34;选择的背景&#34;?所有我想要的选择状态等于正常状态,即。即,即使在选择之后,comboBox应该总是像第一个图像一样。

分配代码有问题吗?有什么使命?我真的以为只有一些我没有使用或初始化的属性,但我还无法找到。

提前致谢,

1 个答案:

答案 0 :(得分:2)

为了给出反馈,我终于能够解决我的问题了。

我不确切知道为什么,但问题全部都是因为我在drawRect绘制边框的方式造成的。不知何故,这些代码

[[NSColor colorWithDeviceRed:174/255.0 green:72/255.0 blue:72/255.0 alpha:1.0] setFill];
NSRectFill(dirtyRect);

被子视图传播,不知道是否是setFill或NSRectFill。因此,NSCombobox的“背景”被涂上了这种颜色。

看到这篇文章后:Adding border and Rounded Rect in the NSView我将我的绘图矩形更改为:

- (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];
}

现在一切正常,正如我想的那样。现在,在我选择了我的组合框之后,没有画出奇怪的背景。

enter image description here

如果有人知道上一段代码发生的情况,请告诉我。