【问题标题】:NSComboBox - problems with background when selectedNSComboBox - 选择时背景问题
【发布时间】:2013-07-31 14:57:37
【问题描述】:

我是一名 iOS 开发人员,最近我正在为 MAC OSX 编写一个桌面应用程序。我对 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。当我分配它时,一切似乎都很好:

问题是,在我选择组合框中的任何选项后,它的背景不知何故“消失”变得透明,我不知道,变成这样:

请注意 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;
}

知道如何“修复”这个“选定的背景”吗?我希望它的选定状态等于正常状态,即。 e. ,comboBox 应该总是像第一张图片一样,即使在选择之后也是如此。

分配代码有问题吗?什么任务?我真的在想这只是一些我没有使用或初始化的属性,但我还找不到。

提前致谢,

【问题讨论】:

  • 我不明白你的问题。 “在一个 NSPopover 中创建一个 NSComboBox”是什么意思?你说组合框背景消失了。我没看到。然后你说“我怎么能用这个消失……”你真的想消失吗?
  • 我编辑了这个问题,试图更具体一些,并改变一些模棱两可的词。请。告诉我你是否还有不明白的地方。

标签: objective-c macos nscombobox nspopover


【解决方案1】:

只是为了提供反馈,我终于能够解决我的问题。

我不知道具体原因,但问题都是因为我在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我把我的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];
}

现在一切正常,正如我所愿。现在,在我选择我的组合框后,没有绘制任何奇怪的背景。

如果有人知道以前的代码会发生这种情况,请告诉我。

【讨论】:

    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多