setBackgroudColor для NSView - PullRequest
       34

setBackgroudColor для NSView

0 голосов
/ 02 августа 2011

Что я скучаю? цвет не изменится.

#import "controller.h"
#import "backgroundView.h"
@implementation controller
-(void)awakeFromNib {
    backgroundView *background = [[backgroundView alloc] init];
    [background setBackgroudColor:[NSColor whiteColor]];
    //also didn't work 
    //[background setBackgroudColor:[[NSColor whiteColor] retain]];
}
@end

//backgroundView.h
#import <Cocoa/Cocoa.h>

@interface backgroundView : NSView{
    NSColor *color;
}
-(void)setBackgroudColor:(NSColor*)newColor;
@end
#import "backgroundView.h"
@implementation backgroundView
-(void)dealloc{
    [super dealloc];
}
-(void)setBackgroudColor:(NSColor*)newColor{
    color = newColor;
    [self setNeedsDisplay:YES];
}
-(void)drawRect:(NSRect)rect{
    [color setFill];
    NSRectFill(rect);
}
@end

Ответы [ 2 ]

2 голосов
/ 02 августа 2011
  1. Вы должны сохранить newColor в методе setBackgroundColor:.
  2. Выпуск color ивара в dealloc
  3. В методе awakeFromNib вы инициализируете свой вид с помощью init, но назначенный инициализатор - initWithFrame:
  4. Нет кода для добавления вновь созданного представления в суперпредставление.
  5. Вы также можете попробовать использовать set вместо setFill для NSColor
0 голосов
/ 02 августа 2011

Вы создаете представление в awakeFromNib, которое прикреплено к никуда.Вместо этого вы должны изменить пользовательский класс вашего представления в Интерфейсном Разработчике, настроить выход для этого представления и вызвать setBackgroudColor: для него.

Кроме того, классы должны начинаться с заглавной буквы, поэтому backgroundView должно быть BackgroundView.Как сказал Андрей, обязательно исправьте управление памятью вашего color ivar.

...