Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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 NSComboBox-选择后出现背景问题_Objective C_Macos_Nscombobox_Nspopover - Fatal编程技术网

Objective c NSComboBox-选择后出现背景问题

Objective c NSComboBox-选择后出现背景问题,objective-c,macos,nscombobox,nspopover,Objective C,Macos,Nscombobox,Nspopover,我是一名iOS开发者,最近我正在为MacOSX编写一个桌面应用程序。我对OSX的视图组件还没有太多的经验,所以这可能是一个愚蠢或简单的问题,但我对这个问题做了一些研究,还没有找到任何解决方案 问题是: 我有一个NSView的自定义专门化,它用作NSPover中使用的Content ViewController的视图 在这个视图中,我称之为“PopoverBackgroundView”,我在drawRect内部绘制了这个红色背景,并计算了另一个较小的rect并绘制了这个类似灰色的颜色。代码如下:

我是一名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背景消失了。我看不到。然后你说“我怎么能随此消失…”你真的想消失吗?我编辑了这个问题,试图更具体一些,并修改了一些模棱两可的词。请告诉我,如果有什么你仍然无法理解的。