2011-08-02 3 views
0

Что я пропущу? цвет не изменится.setBackgroudColor NSView

#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
  1. Вы должны сохранить newColor в setBackgroundColor: методе.
  2. Выпуск color Ивара в dealloc
  3. В методе awakeFromNib инициализации вашего взгляда с init, но назначенным инициализатором initWithFrame:
  4. Там нет коды, где вы добавляете вновь созданный вид на надтаблицы.
  5. Вы также можете попробовать использовать set вместо setFill для NSColor
+0

Можете ли вы дать мне пример, как использовать initWithFrame? – user840250

+0

@ user840250: Вы используете его так же, как 'init', но вы передаете ему прямоугольник, который хотите, чтобы представление имело в качестве рамки. Для получения дополнительной информации см. Руководство по программированию View: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40002978 и NSView ссылка на класс: http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html#//apple_ref/occ/cl/NSView –

0

Вы создаете вид в awakeFromNib, которая не прикрепленную в никуда. Вместо этого вы должны изменить пользовательский класс своего вида в Interface Builder, настроить выход в этом представлении и вызвать на нем setBackgroudColor:.

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