2013-07-31 2 views
1

Я разработчик iOS, и недавно я программирую настольную APP для MAC OSX. У меня все еще нет большого опыта работы с компонентами View OSX, поэтому, возможно, это глупый или простой вопрос, но я немного поработал над этой проблемой и пока не нашел решения.NSComboBox - проблемы с фоном при выборе

Вот проблема:

У меня есть пользовательская специализация в NSView, который используется в качестве зрения содержания ViewController, используемой в моей NSPopover.

В этом представлении, которое я называю «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. Это COMBOBOX будет иметь номера от 1 до 10. Когда я выделяю его, кажется, все просто отлично:

enter image description here

Проблема заключается в том, после того, как я выбираю любые варианты внутри выпадающего списка, это фон как-то «уходит» стал прозрачный, я не знаю, и стать, как это:

enter image description here

Пожалуйста, обратите внимание на красный, как кадр (цвет фона зрения) вокруг 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; 
} 

Любая идея, как я могу «исправить» этот «фон выбранный»? Все, что я хочу, чтобы выбранное состояние было равно нормальному состоянию, т.е. е. , comboBox должен быть всегда как первое изображение, даже после выбора.

Есть что-то не так с кодом распределения? Какая-то миссия? Я действительно думаю, что это просто свойство, которое я не использую или не инициализирую, но пока не могу найти.

Спасибо заранее,

+0

Я не понимаю ваш вопрос. что вы подразумеваете под «созданием NSComboBox внутри одного NSPopover»? Вы говорите, что фон combobox уходит. Я этого не вижу. И тогда вы говорите: «Как я могу исчезнуть с этим ...» Вы действительно хотите исчезнуть? –

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

и теперь все работает нормально, как я хотел. Теперь, после того, как я выберу свой combobox, никакой странный фон не рисуется.

enter image description here

Если кто-то знает сыворотку это происходит с предыдущим кодом, пожалуйста, дайте мне знать.

Смежные вопросы