【发布时间】: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